add_link_options¶
在 3.13 版本中添加。
在当前目录中为可执行程序、共享库或模块库目标添加连接步骤选项,并添加在此命令调用之后排列的选项。
add_link_options(<option> ...)
此命令可用于添加任何链接选项,但存在用于添加库的其他命令(target_link_libraries()
或 link_libraries()
)。请参见 目录
和 目标
LINK_OPTIONS
属性的文档。
注意
此命令不可用于添加静态库目标的选项,因为它们不使用链接器。要添加归档器或 MSVC 库程序标志,请参见 STATIC_LIBRARY_OPTIONS
目标属性。
add_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:
前缀均不受支持。
另请参阅¶
CMAKE_<LANG>_FLAGS
和CMAKE_<LANG>_FLAGS_<CONFIG>
添加了传给编译器的所有调用的语言级标志。这包括驱动编译的调用和驱动链接的调用。