[CMake] Generating Source Files

Bill Hoffman bill.hoffman at kitware.com
Wed Apr 8 16:55:37 EDT 2009


Jeremy Cowgar wrote:
> Bill Hoffman wrote:
>> Jeremy Cowgar wrote:
>>
>>>
>>>
>>> INCLUDE( "${CMAKE_BINARY_DIR}/interpreter/int.cmake" )
>>>
>> So, you are saying that "${CMAKE_BINARY_DIR}/interpreter/int.cmake" 
>> changes and cmake does not re-run?   Can you look in 
>> CMakeFiles/Makefile.cmake? Should be in your binary tree, and it 
>> should have int.cmake as a CMAKE_MAKEFILE_DEPENDS.
>>
>> If you do a make VERBOSE=1 it should say something like:
>> Re-run cmake file: CMakeFiles/cmake.check_cache older than: 
>> ${CMAKE_BINARY_DIR}/interpreter/int.cmake.
> 
> No, "${CMAKE_BINARY_DIR}/interpreter/int.cmake" does not change.
> 
> SET( EU_CORE_UPDATE 0 )
> FOREACH( file ${EU_CORE_FILES} )
>  MESSAGE( "Checking file: ${file}" )
>  IF( ${file} IS_NEWER_THAN "${CMAKE_SOURCE_DIR}/interpreter/int.cmake" )
>    SET( EU_CORE_UPDATE 1 )
>  ENDIF()
> ENDFOREACH()
> 
> That should compare ${file} to determine if it's newer than the 
> int.cmake file right? The int.cmake file is generated by the translator. 
> EU_CORE_FILES contains a list of files that make up the translator 
> source code (.e files). If any of those .e files (EU_CORE_FILES) are 
> newer than int.cmake, then it should trigger a new translation run via: 
> (which will generate a new int.cmake file as a result of the new 
> translation):
> 
> IF( EU_CORE_UPDATE )
>  MESSAGE( "Translating interpreter..." )
>  EXECUTE_PROCESS(
>    COMMAND ${TRANSLATOR} -cmakefile "${CMAKE_SOURCE_DIR}/int.ex"
>    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/interpreter" )
> ENDIF()
> 
> At least that's what I was hoping for. Do I have something wrong?
> 

The file that is produced by the execute_process needs to be the one 
that is included by cmake.   The idea was:

if( file.cmake does not exist or it is older than eu core files)
    generate file.cmake

include(file.cmake)

-Bill


More information about the CMake mailing list