繁体   English   中英

如何控制 Batch Build → Build All 的顺序

[英]How to control order of Batch Build → Build All

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

有一个不太明显的依赖项,我似乎无法在 UI 下或通过手动修改项目文件来表达。 依赖项是所有与 DLL 相关的项目都依赖于cryptest, Release Win32

Visual Studio 允许我们通过选择Build菜单来构建所有配置,然后Batch Build... → Select All → Build 当我执行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

如何控制Batch Build → Build All的顺序?


目前我必须运行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 下什么也不做(字面意思是什么都不做)。

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

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

没有理由或解释。 如果Visual Studio 提供一个日志文件来尝试破译行为,那肯定会很好。


一个相关的问题是 Visual Studio 选择<< some project >>作为默认启动项目,但没有声明性的方式来更改它 这意味着特定项目需要是解决方案文件中列出的第一个项目,并且不能更改。


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

我可以从博客中找到有关该主题的一些信息,例如VS2010 的项目设置更改 但是上面描述的依赖改变如何实现并不是很清楚,而且博客只适用于VS2010或更高版本。

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

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

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

解决方案

配置管理器

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

同时使用每个平台的下拉菜单并删除不适用于相应项目的额外平台。

还要确保对于 x86 构建,您不是在构建 x64 目标,对于 x64 构建,您不是通过取消选中相应的构建复选框来构建 x86 目标。

配置管理器

依赖关系

像这样创建依赖项:

  • cryptlib32 不依赖任何东西
  • cryptest32 依赖于 cryptlib32
  • cryptlib64 依赖于 cryptlib32 和 cryptest32
  • cryptest64 依赖于 cryptlib64
  • 所有剩余的项目都取决于 cryptlib32/64 和 cryptest32/64

……一个例子……

项目依赖

结果

这应该会产生您想要的结果。

测试

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

首先是 x86 库和测试构建,然后是 x64 库和测试,然后是所有其他东西......

------ 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 ==========

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM