[CMake] Executable and library dependencies
eblotml at free.fr
eblotml at free.fr
Tue May 5 08:29:03 EDT 2009
Hi,
I have a question about CMake and dependency management when an executable is built, and linked with static libraries which are built within the same project.
I use a top CMakeLists.txt which looks like:
PROJECT (proj)
SET (subprojects mylib myapp)
FOREACH (prj ${subprojects})
ADD_SUBDIRECTORY (${prj} ${prj})
ENDFOREACH (prj)
mylib/ contains a CMakeList.txt file that contains something like
ADD_LIBRARY (mylib src/mylib.c)
myapp/ contains a CMakeList.txt file that contains something like
ADD_EXECUTABLE (myapp src/myapp.c)
TARGET_LINK_LIBRARIES (myapp -L${PATH_TO_MYLIB} -Wl,--start-group -lmylib -lsomeotherlib -Wl,--end-group)
I don't think I can use the FIND_LIBRARY command, because the actual link command requires the start-group/end-group linker directives, and the actual application is linked against several other libraries.
The problem is that sometimes, myapp is built and linked *before* mylib is actually built.
The net result is that myapp build step fails, as libmylib.a does not exist yet.
It seems to occur when multiple make jobs are run (make -j 3 ...)
There is no explicit dependencies between myapp and mylib, which I guess explain why CMake allows myapp to be built before mylib is built.
What would be the best way to add a dependency to solve this issue?
In other word, I'll go for ADD_DEPENDENCY(myapp x), but I'm not sure how to define 'x' here.
Is there a better way to solve this issue?
Thanks,
Manu
More information about the CMake
mailing list