[CMake] un circle dependency
Alexander Neundorf
a.neundorf-work at gmx.net
Thu Nov 11 16:55:31 EST 2010
On Thursday 11 November 2010, luxInteg wrote:
> Greetings
>
> I am learning cmake.
>
> I think I now know how to generate libraries and executables but I have
> not yet grasped how the tree and directory structure is handled and by
> conseqence how one navigates therein.
>
>
> I have this problem. Lets say my build tree has these directories
>
> L---$originalSourceTree/build/lib
> M---$originalSourceTree/build/bin
>
> libraries say libA.so libB.a are in L. I want to generate executables
> A.bin and B.bin in M but
> they each need to link to newly generated libraries libA.so libB.a
>
>
> a) how do I direct cmake (in the CMakeLists.txt/base directory) to build
> the libraries in ( L )above first -i.e. before atempting to do finds of
> nonexistant libraries ?
The add_library() commands must be before the add_executable() commands,
otherwise the libraries "A" and "B" are not yet know when you do
target_link_libraries(exe A B)
Beside that, the dependencies in the generated makefiles are complete, so
whenever you do a build, cmake makes sure that the libraries are up-to-date
before it builds the executable.
> b) if I insert lines such 'find_library(LIB libA path ../lib' in the
> CmakeLists.txt in the base directory this results in an error so what
> does one insert?
find_library() is not necessary, you can simply use the names of the library
targets when linking against them.
> c) Further down the road, if the generated executables ae linked to
> libraries in the build tree, what happens when one does a 'make install' to
> the 'permanent' filesystem? Are the dependencies transfered?
No, not really.
You mean that the executables find the shared libs when starting ?
This depends on the loader. You can adjust this via the RPATH-related target
properties.
Alex
More information about the CMake
mailing list