[CMake] How to guarntee the sequence of build if no target can be used

Dong Tiger idlecat511 at gmail.com
Mon Jun 1 13:42:17 EDT 2009


2009/5/29 Alexander Neundorf <a.neundorf-work at gmx.net>

> On Thursday 28 May 2009, idlecat511 at gmail.com wrote:
> > Hi,
> >
> > This situation is:
> >
> > foo.h is generated from foo.x. And foo.h is included by bar.h. And then
> > bar.h is included by a lot of c files. So actually every c files
> including
> > bar.h depends on foo.h.
> > But the file number is so big that I don't want to add dependency for
> each
> > one.
> >
> > How can I specify foo.x is generated before all the c files being
> compiled?
> > It seems add_custom_target works but it will regenerate foo.h every time
> > even the foo.x is not modified.
>
> You should use
> add_custom_command(OUTPUT <fullpath>/foo.h
>                   ... )
>
> and then list that generated file as a source file for your target:
>
> add_library(blub <fullpath>/foo.h foo.c bar.c ...)


I know by this way, if foo.h is changed, blub will be rebuilt. But what I
need is foo.h is guaranteed to be up to date before foo.o is built.  I am
not sure if this command is relevant to this. Will cmake try to make sure
all the src files are up to date before compiling any .c files?

>
>
> This should make sure that everything is up to date.
>
> The header-file dependency scanning does in general not work for generated
> files, you need to list the generated file as source file for the targets
> which need it.

Another problem is that I am trying to avoid adding dependencies for these
generated files manually because in my project, there are many generated
head files and quite a few .c files including them. I just want to make sure
the head files are generated before any .c compilation. ADD_CUSTOM_TARGET
can do this but it will regenerate the head files even they are up-to-date.

>
> Alex
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090601/be348aab/attachment.htm>


More information about the CMake mailing list