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()
来限制其影响。目标特定命令还可以控制搜索目录如何传播到其他依赖目标。