On 08/19/2010 09:42 PM, Michael Wild wrote: > > In that case I recommend creating a CMake script (e.g. > create_application_version.cmake) which creates the ApplicationVersion.xml > file. It queries the current revision (have a look at FindSVN.cmake on how to > do this), determines the date and time (this is a problem, refer to this > thread for more info: > http://www.mail-archive.com/cmake@cmake.org/msg30662.html) and then either > does a configure_file() or a file(WRITE) to create ApplicationVersion.xml. > Ideally the create_application_version.cmake is also a configured file (with > the path to the build and source tree and the path to the svn executable > etc.). > > This script is then invoked by a custom command: > > # dummy_file is never created... > add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/ApplicationVersion.xml > ${CMAKE_BINARY_DIR}/dummy_file > COMMAND ${CMAKE_EXECUTABLE} -P > ${CMAKE_BINARY_DIR}/create_application_version.cmake > COMMENT "Creating ApplicationVersion.xml" > VERBATIM > ) > > # this intentionally depends on dummy_file, which is never created > add_custom_target(create_appplication_version ALL > DEPENDS ${CMAKE_BINARY_DIR}/ApplicationVersion.xml > ${CMAKE_BINARY_DIR}/dummy_file) > > add_executable(super_duper main.cpp > ${CMAKE_BINARY_DIR}/ApplicationVersion.xml) > add_dependencies(super_duper create_appplication_version) > > > The trick I'm trying to pull off, is that super_duper depends on > create_appplication_version, which is always out of date and depends on the > non-existing file dummy_file, thus always updating ApplicationVersion.xml. > Not that I haven't tested this.
Possibly, this may be simplified: The COMMAND can be transferred from the custom command to the custom target, so the former goes away and one doesn't need a dummy file for triggering. Furthermore, the custom target doesn't need to be declared ALL, and the ApplicationVersion.xml doesn't need to appear in ADD_EXECUTABLE(), but as it's no header and, thus, not subject to CMake's dependency scanning, one has to imply an explicit dependency through the OBJECT_DEPENDS source file property on main.cpp to ensure the executable's rebuild when ApplicationVersion.xml changes. The create_application_version.cmake should use CONFIGURE_FILE() to generate the ApplicationVersion.xml since this function doesn't write a new output file if it wouldn't differ from the previous one, so the ApplicationVersion.xml doesn't trigger rebuilds if it doesn't actually change. At <http://www.cmake.org/pipermail/cmake/2010-July/037958.html> and <http://www.cmake.org/pipermail/cmake/2010-July/038015.html>, you'll find a similar discussion. Regards, Michael > On 19. Aug, 2010, at 18:54 , Roman Wüger @mac.com wrote: > >> The file should be updated every time a build is started. >> >> Best Regards >> NoRulez >> >> Am 19. Aug 2010 um 16:48 schrieb Michael Wild <them...@gmail.com>: >> >>> >>> On 19. Aug, 2010, at 16:38 , Roman Wüger @mac.com wrote: >>> >>>> Hello, >>>> >>>> i need to create a file called "ApplicationVersion.xml" before the main >>>> source file (main.cpp) would be compiled. >>>> The file should contain some application details and the current Date/Time >>>> and SVN Revision. >>>> >>>> How can I create such file before the source file are compiled? >>>> How can I get the current Date/Time and the SVN Revision? >>>> >>>> Thanks in advance >>>> >>>> Best Regards >>>> NoRulez >>> >>> >>> When should the file be updated? At configure time or every time a build is >>> started? >>> >>> Michael > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://www.cmake.org/mailman/listinfo/cmake _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake