如何控制批量构建→全部构建

时间:2015-10-17 20:49:14

标签: c++ visual-studio build

我有一个包含4个项目和24个配置的C ++解决方案。这些项目包括cryptestcryptlibcryptdlldlltest。然后是x86,x64,调试,发布,DLL导出和DLL导入的部分交叉产品。

我不能在UI下表达或通过手动修改项目文件,这是一种不太明显的依赖。依赖项 所有 与DLL相关的项目依赖于 cryptest, Release Win32

Visual Studio允许我们通过选择 Build 菜单构建所有配置,然后 批量构建...→选择全部→构建< / EM> 即可。当我执行 Build All 时,构建的第一个配置是:

------ Build started: Project: cryptlib, Configuration: DLL-Import Debug x64 ------
Performing Custom Build Step
 Assembling: c:\Documents and Settings\cryptopp-5.6.3\x64masm.asm
Performing Custom Build Step
Compiling...
pch.cpp
...

如上所示,机器选择 cryptlib, DLL-Import Debug x64 作为首选。我想要以下顺序:

  • cryptlib, Release Win32
  • cryptest, Release Win32
  • 不要关心剩下22 ....

问题是我无法告诉Visual studio 所有 Win32和x64 DLL项目依赖于Win32 cryptest 。< / p>

如何控制 批量构建→全部构建 的顺序?

目前,我必须两次完成 Build All 。第一个结束于:

========== Build: 20 succeeded, 4 failed, 0 up-to-date, 0 skipped ==========

第二轮以:

结束
========== Build: 4 succeeded, 0 failed, 20 up-to-date, 0 skipped ==========

当使用文本编辑器重新排序解决方案文件GlobalSection(ProjectConfigurationPlatforms)(并按照我想要的确切顺序放置它们)时,这些是我遇到的那种温暖而模糊的结果。 24个配置将使用Visual Studio 2005下的 Build All 进行构建,但 Build All 不执行任何操作(字面意思,没有任何内容)在测试升级后,在Visual Studio 2008下。

当我手动尝试构建项目(右键单击项目,然后 构建 )时,我得到的结果如下:

1>------ Skipped Build: Project: cryptlib ------
1> 
2>------ Skipped Build: Project: cryptest ------
2> 

没有理由或解释。如果Visual Studio provided a log file试图破译这种行为,那肯定会很好。

相关问题是Visual Studio选择 &lt;&lt;某个项目&gt;&gt; 作为默认的 启动 项目no declarative way to change it。这意味着特定项目需要是解决方案文件中列出的第一个项目,并且不能更改。

我很难找到对Visual Studio 2005(源文件的分发方式)和Visual Studio 2010后升级(一些人如何使用它)友好的解决方案。

我可以从博客中找到有关该主题的一些信息,例如Project settings changes with VS2010。但是,如上所述,如何实现依赖项更改并不是很清楚,博客仅适用于VS2010或更高版本。

1 个答案:

答案 0 :(得分:2)

为cryptest和cryptlib创建x86和x64项目。

对于每个x86 / x64项目对,使用 Add As Link 链接到另一个项目中的所有文件,这样每个文件只有一个副本。

...链接显示红色箭头......

Solution

配置管理器

使用Configuration Manager仅为x86项目构建x86,仅为x64项目构建x64。

还要使用每个平台的下拉列表,并删除不适用于相应项目的额外平台。

同时确保对于x86版本,您不构建x64目标,对于x64版本,您不会通过取消选中相应的 Build 复选框来构建x86目标。

Configuration Manager

依赖关系

创建依赖关系:

  • cryptlib32完全不依赖
  • cryptest32取决于cryptlib32
  • cryptlib64依赖于cryptlib32和cryptest32
  • cryptest64取决于cryptlib64
  • 所有剩余项目视情况而定依赖于cryptlib32 / 64和cryptest32 / 64

......一个例子......

Project Dependencies

<强>结果

这应该产生你想要的结果。

<强>测试

在我的测试项目中,这按预期工作。我使用前缀ClassLibraries命名了我的所有代码,并在最后添加了libtest以模仿您的配置,final只是前两个后的任何项目项目...

首先是x86 lib和test build,然后是x64 lib和test,以及所有其他内容......

------ Rebuild All started: Project: ClassLibraryLib32, Configuration: Debug x86 ------
  ClassLibraryLib32 -> C:\Users\Kory\Source\KoryG-Code\Solution1\ClassLibraryLib32\bin\x86\Debug\ClassLibraryLib.dll
------ Rebuild All started: Project: ClassLibraryLib32, Configuration: Release x86 ------
  ClassLibraryLib32 -> C:\Users\Kory\Source\KoryG-Code\Solution1\ClassLibraryLib32\bin\x86\Release\ClassLibraryLib.dll
------ Rebuild All started: Project: ClassLibraryTest32, Configuration: Release x86 ------
  ClassLibraryTest32 -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryTest32\bin\x86\Release\ClassLibraryTest.dll
------ Rebuild All started: Project: ClassLibraryTest32, Configuration: Debug x86 ------
  ClassLibraryTest32 -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryTest32\bin\x86\Debug\ClassLibraryTest.dll
------ Rebuild All started: Project: ClassLibraryLib64, Configuration: Debug x64 ------
  ClassLibraryLib64 -> C:\Users\Kory\Source\KoryG-Code\Solution1\ClassLibraryLib64\bin\x64\Debug\ClassLibraryLib.dll
------ Rebuild All started: Project: ClassLibraryLib64, Configuration: Release x64 ------
  ClassLibraryLib64 -> C:\Users\Kory\Source\KoryG-Code\Solution1\ClassLibraryLib64\bin\x64\Release\ClassLibraryLib.dll
------ Rebuild All started: Project: ClassLibraryTest64, Configuration: Release x64 ------
  ClassLibraryTest64 -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryTest64\bin\x64\Release\ClassLibraryTest.dll
------ Rebuild All started: Project: ClassLibraryTest64, Configuration: Debug x64 ------
  ClassLibraryTest64 -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryTest64\bin\x64\Debug\ClassLibraryTest.dll
------ Rebuild All started: Project: ClassLibraryFinal, Configuration: Release x86 ------
  ClassLibraryFinal -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryFinal\bin\x86\Release\ClassLibraryFinal.dll
------ Rebuild All started: Project: ClassLibraryFinal, Configuration: Release x64 ------
  ClassLibraryFinal -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryFinal\bin\x64\Release\ClassLibraryFinal.dll
------ Rebuild All started: Project: ClassLibraryFinal, Configuration: Debug x86 ------
  ClassLibraryFinal -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryFinal\bin\x86\Debug\ClassLibraryFinal.dll
------ Rebuild All started: Project: ClassLibraryFinal, Configuration: Debug x64 ------
  ClassLibraryFinal -> c:\users\kory\Source\KoryG-Code\Solution1\ClassLibraryFinal\bin\x64\Debug\ClassLibraryFinal.dll
========== Rebuild All: 12 succeeded, 0 failed, 0 skipped ==========