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