[英]How to control order of Batch Build → Build All
我有一个包含 4 个项目和 24 个配置的 C++ 解决方案。 该项目是cryptest
, cryptlib
, cryptdll
和dlltest
。 然后是 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
问题是我无法告诉 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 目标。
依赖关系
像这样创建依赖项:
……一个例子……
结果
这应该会产生您想要的结果。
测试
在我的测试项目中,这按预期工作。 我用前缀ClassLibraries
命名了我的所有代码,并在最后添加了lib
和test
来模仿您的配置,而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.