[CMake] Regenerating project files based on external file.

Michael Hertling mhertling at online.de
Tue Aug 2 11:02:34 EDT 2011


On 08/01/2011 07:13 PM, The Novice Coder wrote:
> 
> The short version of what I'm trying to do:
> Add some kind of definition to the cmake file that specifies a file, 
> that if modified, will cause the project to be regenerated.
> 
> 
> Longer (more specific) version.
> We (our small program team) want's to use cmake to generate a file 
> "svn_version.h", which has a solution posted on the web.  The problem 
> happens when we checkout new revisions, this file goes unmodified.  
> Looking for a way to cause CMake to regenerate the build files (and with 
> it, the revision number) after an "svn up" command, without having to 
> touch cmakelists.txt.  It would be trivial to simply check files in the 
> .svn folder for modification times, so that would probably be the 
> easiest (although not 100% accurate) way to go.
> 
> Any help on where to look... Thanks!

The usual solution is a custom target which (re)generates svn_version.h
if necessary, i.e. if it would change, to mark it as GENERATED and have
the other targets depend on that custom one. In this way, svn_version.h
is always up-to-date, doesn't trigger unnecessary rebuilds and can be
used normally without invalidating the build files and rebuilding the
whole project subsequently. E.g., you might use a CMake script calling
CONFIGURE_FILE() to regenerate svn_version.h from a template to ensure
it doesn't get touched if nothing has changed:

ADD_CUSTOM_TARGET(svn_version
    ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/svn_version.cmake
)
SET_SOURCE_FILES_PROPERTIES(${CMAKE_BINARY_DIR}/svn_version.h
    PROPERTIES GENERATED TRUE
)
FOREACH(i target_1 target_2 ... target_n)
    ADD_DEPENDENCIES(${i} svn_version)
ENDFOREACH()

# svn_version.cmake:
# set up variables
CONFIGURE_FILE(path/to/svn_version.h.in path/to/svn_version.h)

Do you have special requirements because of which you definitely
need the build files regenerated, i.e. the project reconfigured
and rebuilt instead of just updating svn_version.h?

Regards,

Michael


More information about the CMake mailing list