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等)。