link_directories¶
添加链接器将在其中查找库的目录。
link_directories([AFTER|BEFORE] directory1 [directory2 ...])
添加链接器应在其中搜索库的路径。 给定此命令的相对路径被解释为相对于当前源目录,请参阅 CMP0015
。
该命令仅适用于在其调用后创建的目标。
在 3.13 版本中添加: 目录被添加到当前 CMakeLists.txt
文件的 LINK_DIRECTORIES
目录属性,根据需要将相对路径转换为绝对路径。 有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7)
手册。
在 3.13 版本中添加: 默认情况下,指定的目录将附加到当前目录列表的末尾。 可以通过将 CMAKE_LINK_DIRECTORIES_BEFORE
设置为 ON
来更改此默认行为。 通过显式使用 AFTER
或 BEFORE
,您可以在附加和前置之间进行选择,而与默认设置无关。
在 3.13 版本中添加: link_directories
的参数可以使用带有语法 "$<...>" 的“生成器表达式”。 有关可用表达式,请参阅 cmake-generator-expressions(7)
手册。
注意
此命令很少是必要的,并且在有其他选择时应避免使用。 尽可能首选传递库的完整绝对路径,因为这确保始终链接正确的库。 find_library()
命令提供了完整路径,通常可以直接在调用 target_link_libraries()
时使用。 可能需要库搜索路径的情况包括
像 Xcode 这样的项目生成器,用户可以在构建时切换目标架构,但由于库的完整路径仅提供一个架构(即,它不是通用二进制文件),因此无法使用。
库本身可能具有其他私有库依赖项,这些依赖项希望通过
RPATH
机制找到,但是某些链接器无法完全解码这些路径(例如,由于存在诸如$ORIGIN
之类的东西)。
如果必须提供库搜索路径,则首选通过使用 target_link_directories()
命令而不是 link_directories()
来尽可能地本地化效果。 目标特定的命令还可以控制搜索目录如何传播到其他依赖目标。