在CMake中有LINK_DIRECTORIES或同等物业吗?

use*_*401 7 cmake

我创建了一个包含大量link_directories()命令的项目.我现在想将结果的目录字符串存储到变量中.对于include_directories(),这很容易使用

get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )
Run Code Online (Sandbox Code Playgroud)

但是似乎没有LINK_DIRECTORIES属性可以做

get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )
Run Code Online (Sandbox Code Playgroud)

有没有办法获得用于目标的链接目录列表?

(注意:我意识到我可以自己手动跟踪变量中的链接目录然后使用单个link_directories()但它看起来不是很干净)

Com*_*sMS 7

看看LINK_DIRECTORIES目录属性.

关键是link_directories在每个目录的基础上运行(该命令影响在同一个CMakeLists中定义的所有目标,以及来自其所有子目录的目标),例如,不同于target_include_directories每个目标.

您可以使用以下命令查询属性的值:

get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)
Run Code Online (Sandbox Code Playgroud)

如果从与link_directories调用相同的目录调用.否则,您需要将(完整或相对)路径作为附加参数DIRECTORY.不幸的是,我知道无法获得现有目标的匹配目录.

请注意,一般来说,在CMake中不鼓励使用link_directories,这可能是它不能得到很好支持的主要原因.除非你有充分的理由不这样做,否则你应该始终坚持传递给的完整库路径target_link_libraries.从长远来看,它将为您节省许多麻烦.