target_link_directories¶
在 3.13 版本中新增。
将链接目录添加到目标。
target_link_directories(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定在链接给定目标时链接器应搜索库的路径。每个条目可以是绝对路径或相对路径,后者解释为相对于当前源目录的路径。这些条目将被添加到链接命令中。
指定的目标 <target>
必须使用以下命令创建:add_executable()
或 add_library()
,且不能是 别名目标。
关键词 INTERFACE
、PUBLIC
和 PRIVATE
用于指定其后面条目的 范围。PRIVATE
和 PUBLIC
条目会填充 <target>
的 LINK_DIRECTORIES
属性。PUBLIC
和 INTERFACE
条目会填充 <target>
的 INTERFACE_LINK_DIRECTORIES
属性(导入目标 仅支持 INTERFACE
条目)。每个条目指定一个链接目录,并且会在将其添加到相关属性之前将其转换为绝对路径(如果必要)。对相同 <target>
重复调用会按调用顺序追加条目。
如果指定了 BEFORE
,则内容将前置到相关属性,而不是附加在后面。
target_link_directories
中的参数可以使用带有语法 $<...>
的生成器表达式。有关可用的表达式,请参见 cmake-generator-expressions(7)
手册。有关定义构建系统属性的更多信息,请参见 cmake-buildsystem(7)
手册。
注意
此命令很少用得到,在有其他选择时应避免使用。如果可能,最好传递库的完整绝对路径,因为这样可确保始终链接正确的库。find_library()
命令提供完整路径,通常可以直接在调用 target_link_libraries()
时使用。可能需要库搜索路径的情况包括
Xcode 等项目生成器,其中用户可在构建时切换目标架构,但由于只提供一个架构(即它不是通用二进制文件),因此无法使用库的完整路径。
库本身可能具有其他私有库依赖项,这些依赖项希望通过
RPATH
机制找到,但一些链接器无法完全解码这些路径(例如,由于存在$ORIGIN
之类的东西)。