在cmake中显示目标的链接库列表

Dan*_*urn 11 cmake

有没有办法通过target_link_libraries命令打印列表链接到目标库的文件名

甚至更好,将所有目标的依赖项复制到特定文件夹?

小智 14

get_target_property(OUT Target LINK_LIBRARIES)
message(STATUS ${OUT})
Run Code Online (Sandbox Code Playgroud)


Ant*_*nio 5

实际上不是(*)

但是,您可以使用 cmake 变量来收集要链接的库的名称(使用set( ...list(APPEND ...命令),然后在您的target_link_libraries命令中使用此变量:

target_link_libraries(<targetname> ${YOUR_CMAKE_VARIABLE})
Run Code Online (Sandbox Code Playgroud)

相同的变量也可用于创建复制命令(例如使用此自定义目标


(*)在这里一个类似的问题,但没有明确的答案。


Leo*_*Leo 5

我意识到这并不能完全解决在cmake中执行此操作的问题,但是我遇到了类似的问题,因此我应该分享我的解决方案。

首先,在您的源目录(“项目”)中:

$ mkdir build && cd build
$ cmake ..
Run Code Online (Sandbox Code Playgroud)

然后,使用graphviz创建一个点文件,如下所示

$ cmake --graphviz=graph.dot .
Run Code Online (Sandbox Code Playgroud)

然后,从图形中除去目标的依赖项(我们称其为“ foo”):

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

现在,消除混乱:

$ rm graph.dot*
Run Code Online (Sandbox Code Playgroud)