我有一个包含4个项目和24个配置的C ++解决方案。这些项目包括cryptest
,cryptlib
,cryptdll
和dlltest
。然后是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
问题是我无法告诉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或更高版本。
答案 0 :(得分:2)
为cryptest和cryptlib创建x86和x64项目。
对于每个x86 / x64项目对,使用 Add As Link 链接到另一个项目中的所有文件,这样每个文件只有一个副本。
...链接显示红色箭头......
配置管理器
使用Configuration Manager仅为x86项目构建x86,仅为x64项目构建x64。
还要使用每个平台的下拉列表,并删除不适用于相应项目的额外平台。
同时确保对于x86版本,您不构建x64目标,对于x64版本,您不会通过取消选中相应的 Build 复选框来构建x86目标。
依赖关系
创建依赖关系:
......一个例子......
<强>结果强>
这应该产生你想要的结果。
<强>测试强>
在我的测试项目中,这按预期工作。我使用前缀ClassLibraries
命名了我的所有代码,并在最后添加了lib
和test
以模仿您的配置,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 ==========