[CMake] (no subject)
Nico Schlömer
nico.schloemer at gmail.com
Wed Oct 24 09:33:21 EDT 2012
Hi all,
I'd like to create a shared library that uses another toolkit Foobar,
so within the main CMakeLists.txt I write
TARGET_LINK_LIBRARIES("mylib" ${Foobar_LIBRARIES})
to avoid undefined symbols (I link with -Wl,-no-undefined).
${Foobar_LIBRARIES} consists of {foobarA;foobarB;foobarC}.
This pulls in all Foobar libraries on the link like. Moreover, the
respective src/CMakeFiles/mylib.dir/build.make contains
======================== *snip* ========================
[...]
# External object files for target nosh
nosh_EXTERNAL_OBJECTS =
src/libmylib.so.11.0.0: src/CMakeFiles/mylib.dir/mysource1.cpp.o
src/libmylib.so.11.0.0: src/CMakeFiles/mylib.dir/mysource2.cpp.o
src/libmylib.so.11.0.0: src/CMakeFiles/mylib.dir/mysource3.cpp.o
src/libmylib.so.11.0.0: src/CMakeFiles/mylib.dir/build.make
src/libmylib.so.11.0.0: /usr/lib/libfoobarA.so.11
src/libmylib.so.11.0.0: /usr/lib/libfoobarB.so.11
src/libmylib.so.11.0.0: /usr/lib/libfoobarC.so.11
src/libmylib.so.11.0.0: /usr/lib/liblapack.so
src/libmylib.so.11.0.0: /usr/lib/libblas.so
src/libmylib.so.11.0.0: /usr/lib/libnetcdf.so
src/libmylib.so.11.0.0: src/CMakeFiles/mylib.dir/link.txt
[...]
======================== *snap* ========================
CMake correctly pulls in the libraries BLAS, LAPACK, and netCDF on
which Foobar depends, without me having to specify those in mylib.
Nice!
I'm having one problem with this though:
ldd reveals that libfoobar*.so contains dynamic links to the
respective libraries with versioning info, i.e.,
$ ldd /usr/lib/libfoobarA.so.11 | grep netcdf
libnetcdf.so.7 => /usr/lib/libnetcdf.so.7 (0x00007f1fe33da000)
$
In fact, there is no library by the exact name
/usr/lib/libnetcdf.so
installed. The same goes for BLAS and LAPACK.
I'm now wondering how CMake generates the information in
src/CMakeFiles/mylib.dir/build.make, and how to fix this.
Hints, anyone?
--Nico
More information about the CMake
mailing list