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