[CMake] Creating file with dependencies

James Bigler jamesbigler at gmail.com
Wed Apr 8 15:45:09 EDT 2009


On Wed, Apr 8, 2009 at 1:01 PM, Jon Schewe <jschewe at bbn.com> wrote:
> Bill Hoffman wrote:
>> Jon Schewe wrote:
>>> I recently started using cmake and find it generally to be a nice tool,
>>> however I'm rather frustrated with it now. Can someone please tell me
>>> how to get cmake to conditionally create a file as part of executing a
>>> target? What I want to do looks like this, but apparently
>>> add_custom_command only can execute shell scripts, so I'm not sure how
>>> one can use these nice commands for writing files.
>>>
>> custom command can run any program you want??   You can even run cmake
>> -P and run a cmake script.
>>> FUNCTION(build_includes)
>>>   FILE(WRITE unit_test_includes.hpp "// Autogenerated - do not edit\n")
>>>   FOREACH(test ${TESTS})
>>>     FILE(APPEND unit_test_includes.hpp "#include \"${test}\"\n")
>>>   ENDFOREACH(test)
>>> ENDFUNCTION(build_includes)
>>>
>> Put that in a file mycmake.cmake
>>>
>>> ADD_CUSTOM_COMMAND(OUTPUT unit_test_includes.hpp
>>>                            COMMAND build_includes
>>>                                      DEPENDS ${TESTS}
>>>                                      COMMENT "Building
>>> unit_test_includes.hpp"
>>>                                      )
>>
>> Run ${CMAKE_COMMAND} -P mycmake.cmake as the COMMAND for your custom
>> command.
>>
> OK, so I can't put it all in the same file? I'd rather not have people
> needing to chase down multiple files to figure out what's going on. With
> make I can just put any function call inside the body of a target.
>

You can't do that, because the command is run at build time not
configure time.  In order to run CMake code at build time you need to
run cmake at build time.  Hence Bill's suggestion that you put the
cmake code into a script that cmake processes at build time.

James


More information about the CMake mailing list