You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake中无需手动编写参数,为目标库添加--start-group/--end-group

在CMake中自动将链接库包裹进--start-group/--end-group

可以直接使用CMake 3.12及以上版本提供的$<LINK_GROUP:...>生成器表达式实现需求,完全不需要手动处理target_link_options或给库添加-l前缀。

核心用法

把需要放入组内的库列表,用$<LINK_GROUP:--start-group,库列表,--end-group>包裹后直接传入target_link_libraries即可。CMake会自动处理库的格式转换,且仅在支持该选项的编译器(如GCC/g++)上生效,兼容性良好。

示例代码

假设你原本的链接命令是:

target_link_libraries(myTarget mylibrary1 mylibrary2 ${MY_VARIABLE_LIST_OF_LIBRARIES})

修改为分组链接的版本:

# 可选:先把需要分组的库统一存到变量里,结构更清晰
set(GROUPED_LIBRARIES
  mylibrary1
  mylibrary2
  ${MY_VARIABLE_LIST_OF_LIBRARIES}
)

# 用生成器表达式包裹分组库
target_link_libraries(myTarget
  PRIVATE
    $<LINK_GROUP:--start-group,${GROUPED_LIBRARIES},--end-group>
)

如果还有不需要分组的库,可以分开声明:

target_link_libraries(myTarget
  PRIVATE
    standalone_library  # 无需重复搜索的独立库
    $<LINK_GROUP:--start-group,${GROUPED_LIBRARIES},--end-group>
)

低版本兼容方案

如果你的CMake版本低于3.12,只能手动构造链接选项,但需注意该方式会强制传递选项,对不支持的编译器可能产生警告:

target_link_libraries(myTarget
  PRIVATE
    -Wl,--start-group
    ${GROUPED_LIBRARIES}
    -Wl,--end-group
)

内容的提问来源于stack exchange,提问作者Inquisitive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:45:31