【发布时间】:2015-03-06 07:40:46
【问题描述】:
我想在以下场景中增加使用 MSBuild 构建的并行度:
共有三个 C++ 项目(目标)。第一个是名为A 的静态库,第二个是名为B 的动态库,它依赖于A,第三个是一个可执行的C,它依赖于B。所有的项目都包含简单的源代码,没有头文件生成或其他恶作剧。
此配置中没有任何内容可以阻止所有翻译单元并行编译,因为唯一真正的依赖关系是在链接时。但是,在 MSBuild 中设置引用和依赖项的标准方法会强制所有 A 在它开始在 B 中构建任何东西之前构建,等等。这不必要地序列化了一些构建过程。
项目和通用解决方案需要对“普通”开发人员保持平易近人,这意味着维护项目和构建设置应该完全在 Visual Studio UI 中实现(新库和可执行文件可能依赖于预先存在的属性表,但应该不需要手动编辑新项目的 .vcxproj 文件,也不需要手动编写 MSBuild XML 文件。
我目前的想法是将所有代码从B 和C 移动到单独的静态库中,称为B' 和C'。然后B 将依赖于A 和B',允许它们并行编译。同样,C 最终依赖于A、B' 和C',它们都可以并行编译。正如预期的那样,唯一剩下的串行过程将是链接器步骤。尽管这不会是世界末日,但这比我想要的要麻烦和不习惯。
我真的很希望能够为项目的链接步骤创建依赖项,而这些依赖项也不能作为项目编译步骤的依赖项。在我熟悉的大多数其他构建系统中,即使不是隐含的,这也是微不足道的。考虑到 Visual Studio 的易用性要求,是否可以在 MSBuild for C++ 项目中使用;如果有,怎么做?
【问题讨论】:
标签: visual-studio msbuild linker