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

CMake如何实现依赖更新时重构目标且不额外链接该依赖?

CMake 实现仅链接a、b更新触发prog重构的方案

错误方案原因说明

  • 第一种方案仅将a的构建依赖于b,b更新后只会重编a,若a的输出文件没有发生变更,prog不会触发重链/重编,因此无效
  • 第二种方案通过INTERFACE传递链接依赖,会将b自动加入prog的链接列表,不符合仅链接a的要求

可行实现方案

核心思路是使用CMake的OBJECT_DEPENDS属性添加编译依赖,不会引入任何链接关联,仅触发重编逻辑:

add_library(a SHARED a.cc)
add_library(b SHARED b.cc) # 编译器插件目标

add_executable(prog prog.cc)
# 仅链接a,无b的链接依赖
target_link_libraries(prog PRIVATE a)

# 核心配置:指定prog编译时依赖b的输出文件,b更新即触发prog重编译
set_property(TARGET prog PROPERTY OBJECT_DEPENDS $<TARGET_FILE:b>)

配置说明

  • OBJECT_DEPENDS属性用于指定目标编译对象文件时的额外依赖,不会传递链接参数
  • 生成器表达式$<TARGET_FILE:b>会自动解析为b目标的最终输出文件路径,跨平台、跨编译配置都能正常生效

效果验证

修改b的源码后执行构建,会按顺序执行:编译b → 编译prog的源文件 → 链接生成prog,检查prog的动态库依赖仅包含a,不会出现b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:06:05