[CMake] CONFIGURE_FILE and ADD_DEPENDENCIES

Rupert Brooks rupert.brooks at gmail.com
Fri Mar 26 10:51:49 EDT 2010


Hi,

In my build i have a .cpp file (actually many) which is generated from
a template using a cmake configure file command.

I tried using CONFIGURE_FILE in the CMakeLists.txt, and this works,
but if the template is changed, or the .cpp file gets removed, then
the file will not be regenerated unless i rerun cmake manually.  Make
will stop with the usual

'no rule to make file.... needed by...

The cmake code was like so:

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/force_template.in

${CMAKE_CURRENT_BINARY_DIR}/template_declarations/${file_name})


I then tried using ADD_CUSTOM_COMMAND, but then on the first build, it
cant add the cpp file to the target it is used in because it doesnt
exist
yet.  I had hoped that it would know that it was already a custom
target, so that at build time it has a rule to build it when needed,
but this didnt
work.

CMake code like this

                ADD_CUSTOM_COMMAND(OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/template_declarations/${file_name}
                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/force_template.in
                  COMMAND ${CMAKE_COMMAND}
                  ARGS -Dfile_name=${file_name}
-Dinclude_name=${include_name} -E

"CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/force_template.in

${CMAKE_CURRENT_BINARY_DIR}/template_declarations/${file_name})"
                              )

....later

ADD_LIBRARY(wonderfullibrary
${CMAKE_CURRENT_BINARY_DIR}/template_declarations/${file_name})" ...)

I get this error

  Cannot find source file "force[...].cpp".
  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


I guess i could do add custom target AND configure file.. but this is
starting to seem like i am really doing this the wrong way somehow.
Also,
I have seen other macros where it looks like ADD_CUSTOM_COMMAND should
do the job... not sure what i am doing wrong.

Whats the _right_ way to add a script generated .cpp file to a build?
Is this the right way and i just have a bug, or am i totally going
about it wrongly.

Thanks

Rupert
--------------------------------------------------------------
Rupert Brooks
rupert.brooks at gmail.com


More information about the CMake mailing list