上一篇文章帶你玩轉Visual Studio——帶你管理多種釋出版本讓我們瞭解了Debug與Release的區別,並學會也如果管理 多個不同釋出版本的配製項。在一個大型的項目中,往往不止一個工程,而會有多個工程相互關聯,每個工程也都會有自己的釋出版本,這就是這篇文章將要講述的內容。 一個Solution多個Project 多個工程簡介
在帶你玩轉Visual Studio——帶你建立一個工程一文中提到一個Solution(解決方案)可以有多個Project(工程),那什麼時候需要有多工程呢。 多工程又有什麼好處呢。
應用情境:當一個項目由多個不同的組件(模組)構成時,為每一個組件建立一個工程,所有的組件工程在同一個解決方案下。
優點:結構清晰,可進行分模組開發,對複雜程式進行解耦。 建立一個多工程項目
我們還是以Utils這個工程為例,在帶你發布自己的工程庫一文及上一篇帶你管理多種釋出版本中已經建立了一個Utils工程,並為它編譯出了多個版本的庫,但我們使用這個庫的時候卻是在另一個Solution下進行的,其實我們完全可以而且也應該把使用Utils庫的工程與Utils工程放在一個解決方案下。
建立Project添加到已有Solution中,File->New->Project… 開啟建立工程對話方塊建立一個UsingUtils工程,注意在Solution這一欄中我們選擇Add to solution。
添加一個工程
添加引用關聯,這時我們要使用這個Utils編譯出來的庫,配製也要簡單一點了。右鍵UsingUtils工程->Properties->Common Properties->Framework and references,添加引用(依賴)的工程Utils。設定引用關聯後,如果Utils工程發生改動或更新,在編譯UsingUtils工程時就會重新編譯Utils工程。
添加引用關聯
設定標頭檔的路徑。
設定標頭檔的路徑
設定啟動工程,在有多個工程的Solution中要設定啟動工程(也就是要第一個開始執行的工程),不然你按F5運行時不知道從哪個工程開始執行。選擇UsingUtils工程名右鍵滑鼠->Set as Startup Project。然後就可以執行或調試UsingUtils工程了。 編譯結果和目錄管理
在多個組件同時開發時,把相關的Project放在同一個Solution下會方便很多。但你有沒有發現一個新的問題,如果一個Solution有很多的Project,每一個Project目錄下都會有一個編譯結果的目錄,如下圖這樣你昏不昏。
編譯結果目錄
那如何管理這些目錄,使這些目錄看起來不這麼混亂呢。其實我們是可以設定這些目錄的輸出路徑的,可以把它們放在一起管理。我們可以將輸出目錄設計成這樣: Utils
Utils UsingUtils Output
Win32
Debug
Bin Lib Temp Release
Bin Lib Temp Linux
Debug
Bin Lib Temp Release
Bin Lib Temp
這樣看起來是不是結構清晰多了。Output為輸出目錄,Win32為Windows X32下編譯的結構,Linux為Linux平台下的編譯結果(這個涉及到跨平台開發,暫時不談),Win32下再有Debug和Release等多個不同的釋出版本,Bin下放置編譯出的最終結果(如.exe等),Lib下放置編譯出的所有.lib檔案,Temp放置編譯過程的臨時檔案(如.obj等)。
我們還是以Utils為例進行說明。Utils Solution下有兩個Project:Utils(編譯出Utils工具庫)和UsingUtils(使用Utils的庫),僅以釋出Debug_Static進行說明,其它的釋出方式與此類似。
所有Project使用同一組配製項。
什麼意思呢。我們在帶你玩轉Visual Studio——帶你管理多種釋出版本一文說到Debug和Release就是一組配製項,其實整個Solution有一個配製項,每一個Project也有自己的配製項。
整個Solution的配製項也就是下圖工具列中你能看到的這些配製項:
Solution的配製項
而每一個Project的配製薦是你右鍵工程名->Properties能看到的配製項:
Project的配製項
一般一個Solution下的所有的Project最好使用同組配製項,這樣不容易混亂。
給UsingUtils添加Debug_Static配製項。我們設定Utils的屬性時已經配製了Debug_Static的配製項,並設定了Solution的Debug_Static配製項,再給UsingUtils添加Debug_Static的配製項。
添加配製項
標“4”的Create new solution configurations表示為整個Solution也添加(Debug_Static)配製項,這個複選框得取消勾選,因為設定Utils時已經為Solution預設添加了Debug_Static配製項,不然會添加不上。
設定Utils的輸出路徑,右鍵Utils工程->Properties進行如下配製。
設定輸出路徑
拷貝匯出庫.lib,我們可以將Utils編譯出的靜態庫拷貝Utils.lib到Lib目錄下,這樣我們就可以直接把這個檔案提供到調用方使用。
Build Events中可以設定編譯前、連結前、編譯後要進行的處理事件。這裡我們目地是編譯後將編譯出的Utils.lib拷貝到Lib檔案夾下,所以我們在Post-Build Event輸入以下命令
:如果Lib目錄不存在,側建立這個目錄if not exist $(SolutionDir)Output\Win32\$(Configuration)\Lib md $(SolutionDir)Output\Win32\$(Configuration)\Lib:將(ProjectName).lib檔案拷貝到Lib目錄下copy /y $(SolutionDir)Output\Win32\$(Configuration)\Bin\$(ProjectName).lib $(SolutionDir)Output\Win32\$(Configuration)\Lib\
設定UsingUtils的輸出路徑,與Utils類似如下:
設定UsingUtils的輸出路徑
設定完成,Ok,編譯一下再來看看輸出結果目錄,是不是清晰多了。
新的輸出結果目錄
上一篇回顧:
帶你玩轉Visual Studio——帶你管理多種釋出版本
下一篇要講述的內容:
帶你玩轉Visual Studio——帶你理解微軟的先行編譯頭技術