[英]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.