VS項目屬性頁 Property page 與屬性管理器 Property manager 中配置關係

在新建工程時,總是會有配置路徑、鏈接庫、生成目標等問題,這可以通過修改項目屬性配置來達到目的。

VS 中在一個項目上我們可以通過項目的屬性頁(Project Property page)來修改項目相關屬性,也可以通過修改屬性管理器(Property Manager)中的相關內容(Microsoft.Cpp.Win32.user Property page etc.)來修改項目相關屬性。本文意在說明他們之間的區別與聯繫。


項目文件是文件擴展名爲 .vcxproj 的 XML 文件。 所有在 IDE 中設置的屬性直接寫入項目文件或生成時導入的屬性表中。

設置項目屬性
1. 在菜單欄上,依次選擇“項目”、“屬性”。 或者在“解決方案資源管理器”或“屬性管理器”中,鼠標在項目上右鍵(注意不是在項目名稱下面的 Debug 或 Release 文件夾上),然後選擇“屬性”。 此時將打開項目的“屬性頁”對話框。
2. 在對話框頂部的框中,選擇要應用設置的配置和平臺。
若要創建或修改出現在“配置”框中的配置,請選擇“配置管理器”按鈕。
3. 設置屬性值。 選擇“確定”按鈕後,新值就會寫入項目文件(.vcxproj)。

具體設置可以參考:

MSDN 說明 使用項目屬性

vs2010項目屬性配置


共享可重用的屬性配置

如果你經常需要建立某一類工程,在這一類工程中經常使用相同的“屬性集”,例如建立 OpenCV 類工程時需要將庫目錄加入到搜索路徑,則可以使用“屬性管理器”(Property Manager)在可重用的屬性表文件中設置屬性,文件的擴展名爲 .props。

你可以將一張或多張屬性表應用於新項目,這樣就不必從零開始設置屬性。 若要訪問“屬性管理器”,在菜單欄中選擇“視圖”、“屬性管理器”。

如果選擇“添加新項目屬性表”,然後進行選擇(例如 MyProps.props 屬性表),將顯示屬性頁對話框。 請注意,這個屬性頁對話框適用於 MyProps 屬性表,你所做的任何更改都將寫入表 (.props) 中,而非工程文件 (.vcxproj) 中。
如果直接在 .vcxproj 文件中設置同一屬性,屬性表中的屬性將被覆蓋。 
你可以工程需要導入各種屬性表。 一個解決方案中的多個項目可從同一個屬性表繼承設置,一個項目可有多個表。 屬性表自身可以從另一個屬性表繼承設置。

需要注意的是:由於 .props 文件不作爲項目項創建,因此該文件默認不參與源代碼管理(.vcxproj 是創建工程時默認就有的)。 如果你希望將文件加入源代碼管理,則可以手動添加文件作爲解決方案項。

創建屬性表
1. 在菜單欄上,依次選擇“查看”、“屬性管理器”。 此時將打開“屬性管理器”。
2. 若要定義屬性表的範圍,選擇屬性表適用的項(可以是 Debug、Release 或者整個項目,也可能是一個編譯器自帶的特殊配置,例如 Microsoft.Cpp.Win32.user,Application 等,或另一個之前倒入、建立的屬性表)。 打開該項的右鍵菜單,然後選擇“添加新項目屬性表”。 指定一個名稱和位置。
3. 在“屬性管理器”中,打開新的屬性表然後設置要包括的屬性。
這裏面屬性表從結構上分層分級管理,創建屬性表需要照準需要應用的範圍。編譯器自帶的特殊配置文件如 Microsoft.Cpp.Win32.user 位於 <userprofile>\AppData\Local\Microsoft\MSBuild\v4.0\ folder 中,是一個全局的屬性表,是每次新建工程都會加入的。MSDN 中對這個文件特別提到:

我們不再推薦這些文件,因爲它們是針對每個用戶、每臺計算機來設置項目配置屬性的。 特別是如果你在生成計算機上面向多個平臺,此類“全局”設置會影響生成。 例如,如果你同時擁有一個 MFC 項目和 Windows Phone 項目,則其中一個項目的 .user 屬性將會無效。 可重用的屬性表更爲靈活,而且更加可靠。
儘管 Visual Studio 仍安裝 .user 文件並參與屬性繼承,但默認情況下,這些文件爲空。 最佳做法是刪除項目在“屬性管理器”中的引用,以確保項目按每個計算機設置和每個用戶獨立運行。這對確保在 SCC(源代碼管理)環境中的正確行爲來說非常重要。


那麼可以這麼說:

1. 項目文件是項目建立時就建立的,是擴展名爲 .vcxproj 的 XML 文件,作用域是本項目;

2. 屬性管理器中除了系統定義的在系統目錄下的配置文件外可以自行添加屬性頁/表,擴展名是 .props 的 XML 文件;

3. 自定義屬性表作用優先級是較項目文件 .vcxproj 低的,也就是說設置同一屬性,屬性表中的屬性將被覆蓋。


多重屬性之間的繼承關係:

項目屬性已分層。 每層繼承前一層的值,但是繼承的值可以通過設置屬性顯式重寫。 這是基本的繼承樹:
1. 來自 MSBuild CPP 工具集的默認設置(..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props,由 .vcxproj 文件導入。) 
2. 屬性表 
3. .vcxproj 文件。(可能重寫默認設置和屬性頁設置。) 
4. 項元數據

在屬性頁中:在屬性頁中,黑體字顯示的屬性在當前上下文中定義。 普通字體的屬性將被繼承。


Visual C++ 項目系統基於 MSBuild雖然可以直接在命令行上編輯 XML 項目文件和屬性表,我們仍建議你使用 IDE,在你修改參與繼承的屬性時,這一點尤爲重要。Visual C++ 項目系統不一定可以識別在 MSBuild 中有效的手動編輯文件,在生成過程中可能產生細微錯誤。

項目文件是文件擴展名爲 .vcxproj 的 XML 文件。 所有在 IDE 中設置的屬性直接寫入項目文件或生成時導入的屬性表中。


在創建可重用的屬性配置時,通過添加用戶定義宏可以很好的解決一些問題:

Visual Studio - Where to define custom path macros?

Add User Macro Dialog Box

MSDN:

你可以創建用戶定義的宏,以便在項目生成中將宏用作變量。 例如,可以創建一個用戶定義的宏來提供自定義生成步驟或自定義生成工具的值。 用戶定義的宏是名稱/值對。 在項目文件中,使用 $(name) 表示法訪問該值。
用戶定義的宏存儲在屬性表中。 如果你的項目尚未包含屬性表,請按照中的步驟創建一個屬性表。
創建用戶定義的宏
1. 在“屬性管理器”窗口中(在菜單欄上,依次選擇“視圖”、“屬性管理器”),打開屬性表的快捷菜單(名稱以 .user 結尾),然後選擇“屬性”。 此時將打開該屬性表的“屬性頁”對話框。
2. 在對話框的左窗格中,選擇“用戶宏”。 在右窗格中,選擇“添加宏”按鈕,打開“添加用戶宏”對話框。
3. 在對話框中,指定宏的名稱和值。 (可選)選中“將此宏設置爲生成環境中的環境變量”複選框。

這樣就可以避免去定義系統變量,避免爲了某類工程而去修改系統設置。


相關參考:

https://msdn.microsoft.com/zh-cn/library/669zx6zc.aspx

https://msdn.microsoft.com/zh-cn/library/bb651788.aspx





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章