簡體   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