The .in suffix is merely a convention. Refer to the documentation of the configure_file command for more info.
Michael On 21.08.2010, at 11:04, "Roman Wüger" <noru...@me.com>@mac.com wrote: > So, how must the file "ApplicationVersion.xml.in" looks like? I didn't find > the documentation for the *.in file extensions. > > Thanks in advance > > Best Regards > NoRulez > > Am 21. Aug 2010 um 02:08 schrieb Michael Hertling <mhertl...@online.de>: > >> On 08/20/2010 12:42 PM, Michael Wild wrote: >> > >> > On 19. Aug, 2010, at 23:36 , Michael Hertling wrote: >> > >> >> 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. >> > >> > Ahh, I forgot about the OBJECT_DEPENDS. And you also need to set the >> > GENERATED property to TRUE on the ApplicationVersion.xml file if you leave >> > away the custom command, otherwise CMake will complain at configure time. >> > But all-in-all probably simpler, and you don't need the despicable >> > dummy_file. >> >> Yes, the GENERATED property should be set, but if there's a template >> named ApplicationVersion.xml.in CMake won't complain about a missing >> ApplicationVersion.xml not marked as GENERATED since it checks for a >> ".in" extension automatically. >> >> >> 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. >> > >> > If he's going to encode the time that probably won't matter, since the >> > file will most likely always differ... >> >> Yes, and I assume it's not the OP's desire to trigger a rebuild because >> of a hand's leap. ;) Hence, what should be done is to generate one file >> with the version and another file with the timestamp, preferably by the >> same custom target, but to impose a dependency on the version file only. >> So, the version and the timestamp are regenerated each time a concerned >> target is checked for being up to date, but solely a new version will >> trigger a rebuild. >> >> Regards, >> >> 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
_______________________________________________ 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