[Cmake] ADD_DEPENDENCIES problem
Andy Cedilnik
andy.cedilnik at kitware.com
Fri May 28 08:59:32 EDT 2004
Hi Alex,
The ADD_DEPENDENCIES had a bug and was fixed sometimes during 1.9.
Please update to CMake 2.0.1 and try again.
Thank you.
Andy
On Fri, 2004-05-28 at 04:55, Alexander Neundorf wrote:
> Hi,
>
> I have the following problem:
> I want to build library foo with cmake. This library foo depends on
> library bar, which lives in a subdir of library foo.
> Now library foo is a "foreign" library, which is built with some special
> tools from a config file. When building the library bar, it starts with
> only a config file, a tool reads this config files and creates all the
> sources and headers and a makefile, and then make has to be started.
>
> Library foo uses these generated headers.
>
> I did the following:
> ADD_CUSTOM_COMMAND(OUTPUT libbar/bar.h COMMAND ./build_bar DEPENDS
> libbar/bar.config)
>
> If the files already exist and I change bar/bar.config, this command is
> executed again when I try to build libfoo.
>
> But for the case that libbar/bar.h doesn't exist yet, cmake doesn't
> procude a dependency from my libfoo to the file libbar/bar.h, so that
> ./build_bar is not executed when I try to build libfoo.
>
> So I tried to use ADD_DEPENDENCIES()
> It seems this adds a dependency to a library. The problem is, this
> dependeny is added when the library is being linked, i.e. after the
> objects the library consists of. So the make tries to build the objects
> for libfoo (which depend on libbar/bar.h , but cmake didn't produce this
> dependency sins libbar/bar.h doesn't exist yet), so the objects don't
> build, and the rule to build libbar which would produce the headers would
> be invoked afterwards, i.e. too late.
> So I think I need a way to specify a dependency for the objects or sources
> of libfoo. Is there a way to do this ?
>
> I found an ugly workaround:
>
> ADD_CUSTOM_TARGET(bar-target ALL
> ./build_bar
> DEPENDS ./libbar/bar.config)
> FILE(WRITE aaaadummy.c "void dummy() {}\n")
> ADD_LIBRARY(aaaadummy aaaadummy.c)
> ADD_DEPENDENCIES(aaaadummy ecos-target)
> ADD_DEPENDENCIES(libfoo aaaadummy)
>
> This way my libfoo depends on libaaaadummy, which depends on bar-target,
> which builds libbar. Since libaaaadummy is a lib and starts with a lot of
> "a"s, it becomes (usually) the first target in the all: section of the
> Makefile. Kindof works, but there must be a better way.
>
> Simply ADD_DEPENCIES(libfoo bar-target)
> doesn't work, because at first the objects for libfoo are being built
> (which fails), and after that bar-target is being built.
>
> I'm using cmake 1.9 (i.e. cvs after 1.8).
>
More information about the Cmake
mailing list