On 09/09/2010 06:53 PM, David Aldrich wrote:
> Hi
>
> As mentioned before, I am replacing a manually built gnu makefile (for Linux)
> that builds a library, with CMake.
>
> A required build step is to run an executable called versionInfo that
> processes all the source files of the library and generates a new source file
> called SourceFileInfo.cpp. This generated file must be compiled and added to
> the library. This step must be executed when any library dependency changes
> (i.e. any other source file changes).
>
> I tried:
>
> add_custom_command (
> TARGET Kernel
> PRE_BUILD
> COMMAND ${CMAKE_SOURCE_DIR}/../VersionInfo/versionInfo ${CMAKE_SOURCE_DIR}
> KERNEL
> [COMMENT "Building SourceFileInfo.cpp"]
> )
>
> add_library(Kernel STATIC
> ErrorHandler.cpp
> EnvVars.cpp
> SourceFileInfo.cpp
> <snip>
> )
>
> The source files are compiled ok, but versionInfo does not run and, because
> SourceFileInfo.cpp is therefore not found, the script fails.
>
> Am I on the right track?
>
> I read that PRE_BUILD is only supported for Visual Studio 7 or later, but I
> got no better result with PRE_LINK.
Use the other signature of ADD_CUSTOM_COMMAND(), cf. FAQ 4.6:
ADD_CUSTOM_COMMAND(
OUTPUT SourceFileInfo.cpp
COMMAND .../versionInfo ...
DEPENDS <all files to trigger a regeneration of OUTPUT>)
For an example, look at the following CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(GENDEP C)
FILE(WRITE ${CMAKE_BINARY_DIR}/g.c "void g(void){}\n")
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_BINARY_DIR}/f.c
COMMAND echo "void f(void){}" > ${CMAKE_BINARY_DIR}/f.c
DEPENDS ${CMAKE_BINARY_DIR}/g.c
VERBATIM)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){f();return 0;}\n")
ADD_EXECUTABLE(main main.c f.c)
"f.c" is regenerated and, thus, "main" rebuilt if "g.c" is touched
although it's not incorporated in "main". Btw, if versionInfo is a
target within your project you don't need to specify its location
on disk after COMMAND; the target's name suffices in that case.
Regards,
Michael
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake