[CMake] How to regenerate source file during make?
David Cole
david.cole at kitware.com
Fri Jan 15 10:36:39 EST 2010
On Fri, Jan 15, 2010 at 10:25 AM, Marcel Loose <loose at astron.nl> wrote:
> On Fri, 2010-01-15 at 10:07 -0500, David Cole wrote:
> > On Fri, Jan 15, 2010 at 9:44 AM, Marcel Loose <loose at 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-bounces at cmake.org
> > > > [mailto:cmake-bounces at cmake.org] On Behalf Of Marcel Loose
> > > > Sent: Friday, January 15, 2010 2:55 PM
> > > > To: cmake at 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?
>
>
Yes. Put the configure_file call into a cmake -P script. Then use
add_custom_command to call it, passing all the variables required with -D
args before the -P arg.
Sounds like you'll need to run svn status and svn info *always* and then run
this command afterwards *if* something is different than last time it ran...
HTH,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100115/1c373c08/attachment.htm>
More information about the CMake
mailing list