[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