On Fri, Oct 15, 2010 at 12:17 PM, Michael Hertling <mhertl...@online.de>wrote:
> On 10/15/2010 04:14 PM, william.croc...@analog.com wrote: > > Hello: > > > > If my app requires relinking, then at link time > > I would like to capture the current date and time and place it > > in a last-minute source file which is linked with the application. > > Following is my attempt at this with CMake. > > > > The problems I can see are: > > 1 - It is not portable as it uses the OS date command. > > 2 - It is not portable as it calls gcc directly. > > 3 - It will not work with Debug or Release builds unless > > I set additional target LINK_FLAGS_<type> properties. > > 4 - I wish the creation of the link_date.cc file could be > > done inline of the add_custom_command instead of requiring > > a separate file. (I got into quoting hell.) > > 5 - Sneaking link_date.o onto the link line with the LINK_FLAGS > > property is kind of a hack. > > > > Suggestions please. > > > > Thanks in advance. > > > > Bill > > > > -------------------- CMake code -------------- > > > > # Note that this is a simplified version of the real thing > > # and may contain syntax errors. > > > > add_executable( myapp myapp.cc ) > > target_link_libraries( myapp lib1 lib2 ) > > set_target_properties( myapp PROPERTIES LINK_FLAGS link_date.o ) > > > > add_custom_command( > > TARGET myapp PRE_LINK > > COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_link_date > > COMMAND gcc -m32 -c -I${UTILDIR} link_date.cc > > COMMENT "Make the link_date file" > > VERBATIM > > ) > > > > ------------- Contents of create_link_date ---------- > > > > #!/bin/csh > > > > echo 'const char *link_date() { return("'`date`'"); }' > link_date.cc > > You might use CMake's --build option when hooking into the linking stage: > > CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) > PROJECT(LINKDATE C) > FILE(WRITE ${CMAKE_BINARY_DIR}/main.c " > #include <stdio.h> > int main(void) > { > printf(\"%s\\n\",linkdate()); > return 0; > }") > FILE(WRITE ${CMAKE_BINARY_DIR}/linkdate.c.in " > const char *linkdate() { return(\"@linkd...@\"); } > ") > FILE(WRITE ${CMAKE_BINARY_DIR}/linkdate.cmake " > EXECUTE_PROCESS( > COMMAND date > OUTPUT_VARIABLE LINKDATE > OUTPUT_STRIP_TRAILING_WHITESPACE > ) > CONFIGURE_FILE(\${SRC} \${DST} @ONLY) > ") > ADD_CUSTOM_COMMAND( > OUTPUT ${CMAKE_BINARY_DIR}/linkdate.c > COMMAND ${CMAKE_COMMAND} -DSRC=linkdate.c.in -DDST=linkdate.c > -P linkdate.cmake > DEPENDS ${CMAKE_BINARY_DIR}/linkdate.c.in) > ADD_LIBRARY(linkdate STATIC EXCLUDE_FROM_ALL linkdate.c) > ADD_EXECUTABLE(main main.c) > TARGET_LINK_LIBRARIES(main linkdate) > ADD_CUSTOM_COMMAND( > TARGET main > PRE_LINK > COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_BINARY_DIR}/linkdate.c.in > COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} > --target linkdate) > > This rebuilds the target linkdate - a static library containing the > desired timestamp - just before the main target is linked against it. > Thus, the problems you mentioned should be solved except for #1 which > can not be done in a platform-independent manner at the moment, AFAIK. > > 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 > But if you're going to write a C program anyway.... ...then just use "time" and/or "gmtime" standard library functions to print the date/time out in whatever format you want.
_______________________________________________ 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