target_link_options¶
在 3.13 版本中添加。
为可执行文件、共享库或模块库目标添加链接步骤的选项。
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
命名的 <target>
必须通过诸如 add_executable()
或 add_library()
之类的命令创建,并且不能是 ALIAS 目标。
此命令可用于添加任何链接选项,但存在其他命令来添加库(target_link_libraries()
或 link_libraries()
)。 请参阅 directory
和 target
LINK_OPTIONS
属性的文档。
注意
此命令不能用于为静态库目标添加选项,因为它们不使用链接器。 要添加 archiver 或 MSVC librarian 标志,请参阅 STATIC_LIBRARY_OPTIONS
目标属性。
如果指定了 BEFORE
,则内容将添加到属性的前面,而不是追加到后面。
需要 INTERFACE
、PUBLIC
和 PRIVATE
关键字来指定以下参数的 作用域。PRIVATE
和 PUBLIC
项将填充 <target>
的 LINK_OPTIONS
属性。PUBLIC
和 INTERFACE
项将填充 <target>
的 INTERFACE_LINK_OPTIONS
属性。 以下参数指定链接选项。 对相同的 <target>
的重复调用会按调用顺序追加项。
注意
IMPORTED 目标 仅支持 INTERFACE
项。
target_link_options
的参数可以使用生成器表达式,语法为 $<...>
。 请参阅 cmake-generator-expressions(7)
手册以获取可用的表达式。 请参阅 cmake-buildsystem(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"
对于 Clang
变为 -Xlinker -z -Xlinker defs
,对于 GNU GCC
变为 -Wl,-z,defs
。
LINKER:
前缀可以指定为 SHELL:
前缀表达式的一部分。
LINKER:
前缀支持使用 SHELL:
前缀和空格作为分隔符来指定参数的替代语法。 前一个示例变为 "LINKER:SHELL:-z defs"
。
注意
不支持在 LINKER:
前缀的开头以外的任何位置指定 SHELL:
前缀。