Displaying a target's list of linked libraries

2020-05-23 07:04发布

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?

标签: cmake
4条回答
Rolldiameter
2楼-- · 2020-05-23 07:11

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.

查看更多
淡お忘
3楼-- · 2020-05-23 07:22
get_target_property(OUT Target LINK_LIBRARIES)
message(STATUS ${OUT})
查看更多
再贱就再见
4楼-- · 2020-05-23 07:27

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*
查看更多
做个烂人
5楼-- · 2020-05-23 07:27

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++
查看更多
登录 后发表回答