CMake C#项目add_dependencies自动添加引用问题及构建顺序设置方法
问题答复
1. 该行为是否为预期设计
是的,这是CMake Visual Studio生成器针对C#目标的预期默认行为。
从CMake 3.8版本开始,为适配.NET项目的常规构建逻辑,官方对C#目标的add_dependencies指令做了特殊实现:默认会将声明的依赖项自动转换为MSBuild层面的项目引用,省去开发者额外手动配置引用的步骤。该特性在常规C#项目开发场景下可以简化配置,但确实没有对「仅需构建顺序」和「需要添加引用」两种需求做默认区分。
2. 仅设置构建顺序、不自动添加引用的解决方案
根据你使用的CMake版本,可以选择以下两种方案:
方案1:使用官方专用属性(CMake 3.18及以上版本适用)
CMake 3.18版本专门新增了VS_DOTNET_SKIP_DEPENDENCY_PROJECT_REFERENCES目标属性,开启后会禁用C#目标下add_dependencies自动转项目引用的逻辑,仅保留构建顺序控制能力。
使用方式如下:
# 替换为你实际的C#目标名称 set_property(TARGET YourCSharpTarget PROPERTY VS_DOTNET_SKIP_DEPENDENCY_PROJECT_REFERENCES ON)
配置完成后再通过add_dependencies声明的所有依赖都只会控制构建顺序,不会产生项目引用。
方案2:自定义中间目标做依赖中转(全版本兼容)
如果你的CMake版本低于3.18,可以通过自定义中间目标中转依赖的方式绕开自动添加引用的逻辑:由于CMake只会将对.NET类型目标的依赖转换为项目引用,对自定义构建目标的依赖只会保留构建顺序控制。
使用方式如下:
# 定义自定义预构建目标,依赖所有需要优先构建的项目 add_custom_target(PreBuildRequirements ALL DEPENDS YourFirstRequiredTarget YourSecondRequiredTarget # 替换为你实际需要先构建的目标名 ) # 给C#目标声明对自定义目标的依赖 add_dependencies(YourCSharpTarget PreBuildRequirements)
内容的提问来源于stack exchange,提问作者user2690730
相关产品推荐
相关产品推荐

