On Fri, 2010-01-15 at 16:45 +0100, Michael Wild wrote: > On 15. Jan, 2010, at 16:38 , David Cole wrote: > > > On Fri, Jan 15, 2010 at 10:35 AM, Michael Wild <them...@gmail.com> wrote: > > > >> > >> On 15. Jan, 2010, at 16:25 , Marcel Loose wrote: > >> > >>> On Fri, 2010-01-15 at 10:07 -0500, David Cole wrote: > >>>> On Fri, Jan 15, 2010 at 9:44 AM, Marcel Loose <lo...@astron.nl> wrote: > >>>> Hi Jack, > >>>> > >>>> The difference with your and my case is that you have an input > >>>> file > >>>> (the .xsd file) and output files (the .h and .cpp files). In > >>>> my case I > >>>> generate the output file, e.g. myheader.h, from myheader.h.in, > >>>> using > >>>> configure_file(). The problem is that I cannot get this to > >>>> work during > >>>> 'make', only during 'cmake'. > >>>> > >>>> Best regards, > >>>> Marcel Loose. > >>>> > >>>> On Fri, 2010-01-15 at 15:04 +0100, Smith Jack (Ext. - UGIS - > >>>> UniCredit > >>>> > >>>> Group) wrote: > >>>>> I do a similar thing with an XSD file from which I generate > >>>> c++ > >>>> wrapper classes for accessing the corresponding XML > >>>>> > >>>>> Note the DEPENDS line ! > >>>>> > >>>>> MACRO(XSD FILE NAMESPACE) > >>>>> ADD_CUSTOM_COMMAND( > >>>>> OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/xml/${FILE}.cpp > >>>>> OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/xml/${FILE}.h > >>>>> DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/xml/${FILE}.xsd > >>>>> COMMAND ${XAPI_CODESYNTH}/bin/xsd > >>>>> ARGS cxx-tree --generate-serialization > >>>> --hxx-suffix .h > >>>> --cxx-suffix .cpp --fwd-suffix -fwd.hxx --type-naming java > >>>> --function-naming java --namespace-map =${NAMESPACE} > >>>> --generate-polymorphic --output-dir > >>>> ${CMAKE_CURRENT_SOURCE_DIR}/xml > >>>> ${CMAKE_CURRENT_SOURCE_DIR}/xml/${FILE}.xsd > >>>>> COMMENT "generating Codesynthesis Wrappers") > >>>>> ENDMACRO(XSD) > >>>>> > >>>>> > >>>>> > >>>>>> -----Original Message----- > >>>>>> From: cmake-boun...@cmake.org > >>>>>> [mailto:cmake-boun...@cmake.org] On Behalf Of Marcel Loose > >>>>>> Sent: Friday, January 15, 2010 2:55 PM > >>>>>> To: cmake@cmake.org > >>>>>> Subject: [CMake] How to regenerate source file during > >>>> make? > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> I've been struggling with this for hours now and I can't > >>>> seem > >>>>>> to get a grip on it. > >>>>>> > >>>>>> I have a header file that must be (re)generated during > >>>> 'make' > >>>>>> when some external data have changed. I can successfully > >>>>>> generate this file during 'cmake' using configure_file(), > >>>> but > >>>>>> I haven't been able to figure out how I can trigger the > >>>>>> configure_file() during make. > >>>>>> > >>>>>> Should I define a target for this header file? Or can I > >>>>>> specify some kind of file dependency, such that when the > >>>>>> header file is missing our out-of-date, it will be > >>>> (re)generated? > >>>>>> > >>>>>> I guess it must be some clever combination of > >>>>>> add_custom_command() and add_custom_target(). > >>>>>> > >>>>>> Best regards, > >>>>>> Marcel Loose. > >>>> > >>>> > >>>> > >>>> This should work already: if you change my_header.h.in then cmake > >>>> should re-run to re-configure your file at 'make' time. > >>>> > >>>> > >>>> If you have additional dependencies that should trigger a > >>>> re-configure, you should probably convert it to an add_custom_command > >>>> such that it happens at build time. > >>> > >>> It's not the myheader.h.in that's changing; myheader.h should be > >>> regenerated because the value of one of the variables in myheader.h.in > >>> (that get expanded) change. > >>> > >>> To be more precise, I try to record the svn revision number (and some > >>> more svn info). I carefully read > >>> http://www.mail-archive.com/cmake@cmake.org/msg25922.html, because it > >>> closely matches my problem, but I couldn't figure out what > >>> update_version.cmake should do exactly. In my case, I would need the > >>> values of a number CMake variables (like CMAKE_CURRENT_BINARY_DIR), but > >>> of course, these values are not around anymore when running 'make'. > >>> Should all these variables be passed using -D? > >>> > >>> Best regards, > >>> Marcel Loose. > >> > >> You configure_file a CMake script at CMake time which you then use in an > >> add_custom_command to run at make-time. So you put all the "static" data you > >> need (such as CMAKE_BINARY_DIRECTORY, etc.) in the script file and then you > >> have them available at make time: > >> > >> some_script.cmake: > >> ------------------ > >> set(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@") > >> set(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") > >> set(SVN_EXECUTABLE "@SVN_EXECUTABLE@") > >> # ... do what you need to to ... > >> ------------------- > >> > >> > >> But I still don't see why you have to extract version-information at build > >> time, because IMHO that shouldn't change between CMake-runs. > >> > >> > > I'm assuming he wants to encode "up-to-the-minute" svn status output in the > > build, which changes the second you make a local mod to any source file > > anywhere in your tree... > > > > Admirable goal, but sure does suck to depend on everything. :-) > > Ahhh. I see. That DOES suck. Hope the configured file gets compiled into only one single object file and doesn't trigger an avalanche of recompiling/relinking... > > Michael
Yep, David and Michael, you're both right. I should put this into a .cc file, not a .h file. I'm working on the configure_file(some_script.cmake.in) solution now. Seems that's the best way to do it. Thanks for your input. Best regards, Marcel Loose. _______________________________________________ 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