gpt4 book ai didi

c++ - 如何控制 Batch Build → Build All 的顺序

转载 作者:太空狗 更新时间:2023-10-29 21:39:22 29 4
gpt4 key购买 nike

我有一个包含 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,发布 Win32
  • cryptest,发布 Win32
  • 不关心剩下的 22 个....

问题是我无法告诉 Visual Studio 所有 Win32 和 x64 DLL 项目依赖于 Win32 cryptest.

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


目前我必须运行 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 选择 << some project >> 作为默认的 Startup 项目no declarative way to change it .这意味着特定项目必须是解决方案文件中列出的第一个项目,并且不能更改。


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

我可以找到一些关于这个主题的信息,比如 Project settings changes with VS2010来自博客。但是它并不清楚如何影响如上所述的依赖项更改,并且该博客仅适用于 VS2010 或更高版本。

最佳答案

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

对于每个 x86/x64 项目对,使用添加为链接链接到另一个项目中的所有文件,这样每个文件只有一个拷贝。

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

Solution

配置管理器

使用配置管理器仅为 x86 项目构建 x86,为 x64 项目构建 x64。

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

同时确保对于 x86 构建您不是构建 x64 目标,对于 x64 构建您不是构建 x86 目标,方法是取消选中相应的构建复选框。

Configuration Manager

依赖关系

这样创建依赖关系:

  • cryptlib32 不依赖于任何内容
  • cryptest32 依赖于 cryptlib32
  • cryptlib64 依赖于 cryptlib32 和 cryptest32
  • cryptest64 依赖于 cryptlib64
  • 您所有剩余的项目都依赖于 cryptlib32/64 和 cryptest32/64(视情况而定)

...一个例子...

Project Dependencies

结果

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

测试

在我的测试项目中,这按预期工作。我用前缀 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 ==========

关于c++ - 如何控制 Batch Build → Build All 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191432/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com