[CMake] How to depend on an ExternalProject
Rolf Eike Beer
eike at sf-mail.de
Fri Oct 8 04:50:24 EDT 2010
Hi,
I have a problem with ExternalProject and how to depend on that. I'm not
absolutely sure I got the CMakeLists.txt right, so I first ask here before
filing a bug report.
The idea is like this: we have an project that generates a couple of
files. In a special configuration of another project we need those files
as input for a special build step. Those step will take those files,
mangle them and will generate a source file at the end. This is then added
as usual to a library (in my example below to a executable, but that
doesn't matter). When I run the example below I get:
[ 80%] Built target Subdir_Build
make[2]: *** No rule to make target `Subdir_Build', needed by `main.c'.
Stop.
I've tested this with 2.8.2 and 2.8.3-rc2.
Put this into CMakeLists.txt
=== snip ===
PROJECT(MaindirThing C)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2)
INCLUDE(ExternalProject)
ExternalProject_Add(Subdir_Build
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/build_subdir"
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/subdir"
CMAKE_ARGS
"-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/build_subdir/install"
INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/build_subdir/install"
)
ADD_CUSTOM_COMMAND(
OUTPUT "main.c"
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${CMAKE_CURRENT_BINARY_DIR}/build_subdir/install/foo
${CMAKE_CURRENT_BINARY_DIR}/main.c
DEPENDS Subdir_Build
)
ADD_EXECUTABLE(simple_exe main.c)
=== snap ===
And this goes to subdir/CMakeLists.txt
=== snip ===
PROJECT(SubdirThing NONE)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/foo_file "int main(void)\n{\n
return 0;\n}\n")
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/foo_file DESTINATION .)
=== snap ===
Side note: I would have expected that CMAKE_INSTALL_PREFIX is set to
INSTALL_DIR if the external project is a cmake one.
Eike
More information about the CMake
mailing list