[CMake] Creating file with dependencies

Jon Schewe jschewe at bbn.com
Wed Apr 8 15:56:59 EDT 2009


James Bigler wrote:
> 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.
>   
OK, that's fair. I have been equating cmake with make and that's not the
case. I need to remember that cmake builds makefiles which are then
executed by cmake. So unless cmake translated it's commands all into
make (which I suppose it could), then one needs to call cmake again to
use these cmake commands.

-- 
Jon Schewe | Research Scientist
BBN Technologies | http://www.bbn.com
952-545-5720 - Office
612-210-8818 - Cell

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090408/5f8aba17/attachment-0001.htm>


More information about the CMake mailing list