引入的原因
在不同的编译器驱动程序(如 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 就能在各种平台上生成正确的链接命令,极大地提高了可移植性。