目标链接选项¶
在 3.13 版本加入.
向可执行文件、共享库或模块库目标的链接步骤添加选项。
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
命名的 <target> 必须由命令创建,例如 add_executable() 或 add_library() 并且不能是 ALIAS target。
此命令可用于添加任何链接选项,但存在用于添加库的替代命令( target_link_libraries() 或 link_libraries())。请参阅 directory 和 target LINK_OPTIONS 属性的文档。
备注
此命令不能用于为静态库目标添加选项,因为它们不使用链接器。要添加存档器或 MSVC 库管理器标志,请参阅 STATIC_LIBRARY_OPTIONS 目标属性。
如果指定了 BEFORE,则内容将被添加到属性中而不是附加到属性中。
需要 INTERFACE、PUBLIC 和 PRIVATE 关键字来指定以下参数的范围 <Target Usage Requirements>`。 PRIVATE 和 PUBLIC 项将填充 <target> 的 LINK_OPTIONS 属性。 PUBLIC 和 INTERFACE 项将填充 <target> 的 INTERFACE_LINK_OPTIONS 属性。以下参数指定链接选项。重复调用相同的 <target> 按调用的顺序追加项目。
备注
IMPORTED 目标 仅支持 INTERFACE 项。
target_link_options 的参数可以使用语法为“$<...>”的生成器表达式。请参阅 cmake-generator-expressions(7) 手册了解可用的表达式。 |更多_另见|
主机和设备特定链接选项¶
在 3.18 版本加入: 当涉及设备链接步骤时,它由 CUDA_SEPARABLE_COMPILATION 和 CUDA_RESOLVE_DEVICE_SYMBOLS 属性和策略 CMP0105 控制,原始选项将被传递到主机和设备链接步骤(包装在“-Xcompiler”或设备链接的等效项中)。用 $<DEVICE_LINK:...> 生成器表达式包装的选项将仅用于设备链接步骤。用 $<HOST_LINK:...> 生成器表达式包装的选项将仅用于主机链接步骤。
选项重复数据删除¶
用于目标的最终选项集是通过累积当前目标的选项及其依赖项的使用要求而构建的。对选项集进行去重以避免重复。
在 3.12 版本加入: 虽然对单个选项有利,但重复数据删除步骤可以分解选项组。例如,“-option A -option B”变为“-option A B”。可以使用类似 shell 的引号和 SHELL: 前缀来指定一组选项。 SHELL: 前缀被删除,选项字符串的其余部分使用 separate_arguments() UNIX_COMMAND 模式进行解析。例如,"SHELL:-option A" "SHELL:-option B" 变为 -option A -option B。
处理编译器驱动程序差异¶
为了将选项传递给链接器工具,每个编译器驱动程序都有自己的语法。 LINKER: 前缀和 , 分隔符可用于以可移植的方式指定要传递给链接器工具的选项。 LINKER: 被适当的驱动程序选项和 , 替换为适当的驱动程序分隔符。驱动程序前缀和驱动程序分隔符由 CMAKE_<LANG>_LINKER_WRAPPER_FLAG 和 CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP 变量的值给出。
例如,"LINKER:-z,defs" 变成``-Xlinker -z -Xlinker defs`` 对于``Clang`` 和``-Wl,-z,defs`` 对于``GNU GCC ``。
LINKER: 前缀可以指定为 SHELL: 前缀表达式的一部分。
作为一种替代语法,LINKER: 前缀支持使用``SHELL:`` 前缀和空格作为分隔符的参数规范。前面的例子变成了``"LINKER:SHELL:-z defs"``。
备注
不支持在 LINKER: 前缀以外的任何地方指定 SHELL: 前缀。