28

Is there a way to print a list the filenames for the libraries linked into a target via the target_link_libraries command

or even better, have all a target's dependencies copied to a specific folder?

Daniel Ogburn
  • 551
  • 1
  • 6
  • 16

4 Answers4

72
get_target_property(OUT Target LINK_LIBRARIES)
message(STATUS ${OUT})
AGuest
  • 721
  • 6
  • 2
9

I realise this doesn't fully answer the question with regards doing it within cmake, but I faced a similar problem and thought I should share my solution.

First, in your source directory ("project"):

$ mkdir build && cd build
$ cmake ..

Then, use graphviz to create a dot file, as in this answer:

$ cmake --graphviz=graph.dot .

Then, strip out the dependencies from the graph for your target (let's call it "foo"):

$ sed -n 's/.*label="\(.*\)"\s.*/\1/p' graph.dot.foo > foo_dependencies.txt

Now, remove the clutter:

$ rm graph.dot*
Community
  • 1
  • 1
Leo
  • 1,077
  • 11
  • 24
5

Actually not(*).

However, you can use a cmake variable to collect the name of the libraries that you want to link (using the set( ... or the list(APPEND ... command), and then use this variable in your target_link_libraries command:

target_link_libraries(<targetname> ${YOUR_CMAKE_VARIABLE})

The same variable can also be used to create your copy commands (for example using this custom target)


(*) A similar question was asked here, and it got no definitive answer.
Community
  • 1
  • 1
Antonio
  • 19,451
  • 13
  • 99
  • 197
2

Well, all linked libraries to a given target TARGET are in the build.../CMakeFiles/TARGET.dir/link.txt.

For instance, TARGET=dirac.x,

.../build_intel17_mkl_i8/.less CMakeFiles/dirac.x.dir/link.txt

There will be a large number of linked libraries:

/cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort  -Wl,-E  -w -assume byterecl -g -traceback -DVAR_IFORT -i8 -w -assume byterecl -g -traceback -DVAR_IFORT -i8 -O3 -ip CMakeFiles/dirac.x.dir/src/main/main.F90.o  -o dirac.x  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/lib  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/gen1int-build/external/lib  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/pelib-build/external/lib -Wl,-rpath,/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/lib:/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/gen1int-build/external/lib:/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/pelib-build/external/lib: libobjlib.dirac.x.a src/pelib/libpelib_interface.a external/lib/libstieltjes.a -limf -lsvml -lirng -lstdc++ -lm -lipgo -ldecimal -lstdc++ -lgcc -lgcc_s -lirc -lsvml -lc -lgcc -lgcc_s -lirc_s -ldl -lc external/pcmsolver/install/lib/libpcm.a /usr/lib/x86_64-linux-gnu/libz.so -limf -lsvml -lirng -lstdc++ -lm -lipgo -ldecimal -lstdc++ -lgcc -lgcc_s -lirc -lsvml -lc -lgcc -lgcc_s -lirc_s -ldl -lc /usr/lib/x86_64-linux-gnu/libz.so src/libxcfun_fortran_bindings.a external/xcfun-build/src/libxcfun.a external/lib/libpelib.a libgen1int_interface.a external/lib/libgen1int.a -Wl,--start-group /cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64/libmkl_lapack95_ilp64.a -lmkl_intel_ilp64 -qopenmp -Wl,--end-group -Wl,--start-group -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread /usr/lib/x86_64-linux-gnu/libm.so -qopenmp -Wl,--end-group external/pcmsolver/install/lib/libpcm.a external/xcfun-build/src/libxcfun.a external/lib/libpelib.a external/lib/libgen1int.a /cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64/libmkl_lapack95_ilp64.a -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread /usr/lib/x86_64-linux-gnu/libm.so -lirng -ldecimal -lstdc++
Nike
  • 1,223
  • 2
  • 19
  • 42
Miro Iliaš
  • 419
  • 5
  • 16