引入的原因

在不同的编译器驱动程序(如 GCC、Clang、MSVC 等)上,向底层链接器传递选项的语法是不同的:

  • GCC/Clang: 需要使用 -Wl, 作为前缀,用逗号 , 分隔选项(例如:-Wl,--gc-sections)。
  • MSVC (Visual Studio): 通常直接传递选项(例如:/INCREMENTAL:NO)。

具体使用

target_link_options 引入了一个特殊的 LINKER: 前缀,CMake 会自动将其转换为当前平台和编译器所需的正确语法。

target_link_options(my_target PRIVATE
    "LINKER:--gc-sections" # CMake 会自动处理 -Wl, 或其他所需的前缀
)

这样,CMake 就能在各种平台上生成正确的链接命令,极大地提高了可移植性。

参考

  1. target_link_options — CMake 4.1.2 Documentation