Set compiler and build properties (設定編譯器及組建屬性)

在 IDE 中,屬性會公開建置專案所需的資訊。 此資訊包含應用程式名稱、副檔名 (例如 DLL、LIB、EXE)、編譯器選項、連結器選項、偵錯工具設定、自訂建置步驟,以及許多其他項目。 一般而言,您可以使用屬性頁來檢視和修改這些屬性。 若要存取屬性頁,請從主功能表中選擇 [專案]>[專案名稱][屬性],或以滑鼠右鍵按一下 [方案總管] 中的專案節點,然後選擇 [屬性]

預設屬性

當您建立專案時,系統會指派各種屬性值。 預設值會依據專案類型以及您在應用程式精靈中選擇的選項而稍有不同。 例如,ATL 專案具有與 MIDL 檔案相關的屬性,但這些屬性不存在於基本的主控台應用程式中。 預設屬性會顯示在 [屬性頁] 的 [一般] 窗格中:

Visual Studio 專案屬性對話方塊的螢幕擷取畫面。

[一般] 頁面已開啟。 [專案預設值] 區段會醒目顯示,其中包括 [組態類型] 設定為 [應用程式] (.exe),使用 MFC 設定為 [使用標準 Windows 程式庫]、[字元集] 為 [Unicode]、[通用語言執行平台支援] 設定為 [沒有 Common Language Runtime 支援]、[整個程式最佳化] 設定為 [沒有整個程序最佳化],而 Windows 市集 APP 支援設定為 [否]。

套用屬性以建置組態和目標平台

某些屬性 (例如應用程式名稱) 會套用至所有組建變體與目標平台,無論它是偵錯組建還是發行組建。 但大部分的屬性都與組態相關。 若要產生正確的程式碼,編譯器必須知道程序執行所在的特定平台,以及要使用的特定編譯器選項。 因此,當您設定屬性時,請務必注意新值應該套用到哪個組態與平台。 它應該只套用到偵錯 Win32 組建,還是也應該套用到偵錯 ARM64 和偵錯 x64? 例如,根據預設,[最佳化] 屬性在發行組態中設定為 [最快速度 (/O2)],但在偵錯組態中已停用。

您一律可以看到並變更屬性值應套用至的組態和平台。 下圖顯示在頂端中包含組態與平台資訊控制項的屬性頁。 在此設定最佳化屬性時,它只會套用至偵錯 Win32 組建,即目前作用中的組態,如紅色箭號所示。

Visual Studio [屬性頁] 對話方塊的螢幕擷取畫面。

頁面會開啟至 C/C++,最佳化。 [最佳化] 設定會設定為已呼叫的 [已停用] (/Od)。箭號會呼叫專案屬性頁中 [組態] 設定之間的關聯性,其設定為 Active(Debug),而工具列上 [方案組態] 下拉式清單中的設定則設定為 [偵錯]。 另一個箭號會呼叫專案屬性頁中 [平台] 設定之間的關聯性,其設定為 Active(Win32),而工具列上 [方案平台] 下拉式清單中的設定則設定為 x86。

下圖顯示相同的專案屬性頁,但組態已變更為 [發行]。 請注意 [最佳化] 屬性的不同值。 另外請注意,使用中的組態仍然是 [偵錯]。 您可以在此處設定任何組態的屬性;它不一定是使用中的組態。

Visual Studio 專案 [屬性頁] 對話方塊的螢幕擷取畫面。已呼叫 [組態] 下拉式清單,並設定為 [發行]。C/C++ >最佳化 > 最佳化設定設為 [最快速度] (/O2)。

目標平台

「目標平台」指的是可執行檔將在其上執行之裝置及作業系統的類型。 您可以為多個平台建置專案。 C++ 專案可用的目標平台取決於專案種類。 它們包括但不限於 Win32、x64、ARM、ARM64、Android 和 iOS。 您可能會在 [組態管理員] 中看到的 X86 目標平台,等同於原生 C++ 專案中的 Win32。 Win32 表示 32 位元 Windows,而 x64 表示 64 位元 Windows。 如需這兩個平台的詳細資訊,請參閱執行 32 位元應用程式

您可能會在 [組態管理員] 中看到的 [任何 CPU] 目標平台值,對原生 C++ 專案沒有任何影響。 它只與 C++/CLI 和其他 .NET 專案類型相關。 如需詳細資訊,請參閱 /CLRIMAGETYPE (指定 CLR 映像的類型)

如需設定偵錯組建屬性的詳細資訊,請參閱:

C++ 編譯器和連結器選項

C++ 編譯器和連結器選項位於 [組態屬性] 下方左窗格中的 [C/C++] 和 [連結器] 節點底下。 這些選項會直接轉譯為傳遞至編譯器的命令列選項。 若要閱讀特定選項的相關文件,請選取中央窗格中的選項,然後按 F1。 或者,您可以在 [MSVC 編譯器選項] 和 [MSVC 連結器選項] 中瀏覽所有選項的文件。

[屬性頁] 對話方塊只會顯示與目前專案相關的屬性頁。 例如,如果項目沒有 .idl 檔案,則不會顯示 MIDL 屬性頁。 如需每個屬性頁上設定的詳細資訊,請參閱屬性頁 (C++)

目錄和路徑值

MSBuild 支援針對特定字串值使用編譯時間常數,例如 Include 目錄和路徑,稱為巨集。 巨集可以參考 Visual Studio 或 MSBuild 系統定義的值,或使用者定義的值。 巨集看起來像 $(macro-name)%(item-macro-name)。 它們會公開在屬性頁中,您可以在其中參考及修改它們,方法是使用屬性編輯器。 使用巨集,而不是硬式編碼的值,例如目錄路徑。 巨集可讓您更輕鬆地在電腦與 Visual Studio 版本之間共用屬性設定。 此外,您可以更妥善地確保專案設定能正確參與屬性繼承

下圖顯示 Visual Studio C++ 專案的屬性頁。 左窗格中已選取 [VC++ 目錄規則],則右窗格中會列出與該規則建立關聯的屬性。 屬性值通常是巨集,例如 $(VC_SourcePath)

適用於各種目錄規則的 Visual Studio 屬性頁對話方塊螢幕擷取畫面。

[VC++ 目錄] 頁面已開啟,其中包含 VC++ 目錄規則的屬性。 範例規則是 Source 目錄,其設定為 $(VC_SourcePath)。 Include 目錄、程式庫目錄、可執行檔目錄等都有規則。

您可以使用屬性編輯器來檢視所有可用巨集的值。

預先定義巨集

  • 全域巨集
    全域巨集會套用至專案組態中的所有項目。 全域巨集具有語法 $(name)。 例如,$(VCInstallDir) 即是全域巨集,這會儲存 Visual Studio 安裝根目錄。 全域巨集對應於 MSBuild 中的 PropertyGroup

  • 項目巨集
    項目巨集具有 語法 %(name)。 對於檔案,項目巨集只套用至該檔案。例如,您可以使用 %(AdditionalIncludeDirectories) 來指定只套用至特定檔案的 Include 目錄。 這類型的項目巨集對應於 MSBuild 中的 ItemGroup 中繼資料。 在專案組態的內容中使用時,項目巨集會套用至特定類型的所有檔案。 例如,C/C++ [前置處理器定義] 組態屬性可以接受套用至專案中所有 .cpp 檔案的 %(PreprocessorDefinitions) 項目巨集。 這類型的項目巨集對應於 MSBuild 中的 ItemDefinitionGroup 中繼資料。 如需詳細資訊,請參閱項目定義

使用者定義巨集

您可以建立「使用者定義巨集」,在專案組建中當作變數使用。 例如,您可以建立使用者定義巨集,提供自訂建置步驟或自訂建置工具的值。 使用者定義巨集是名稱/值組。 在專案檔中,可以使用 $(name) 標記法來存取值。

使用者定義巨集會儲存在屬性工作表中。 如果您的專案尚未包含屬性工作表,則可以依照共用或重複使用 Visual Studio 專案設定底下的步驟建立一個。

建立使用者定義巨集

  1. 開啟 [屬性管理員] 視窗。 (在功能表列上,選擇 [檢視]>[屬性管理員] 或 [檢視]>[其他 Windows]>[屬性管理員]。)開啟屬性工作表的捷徑功能表 (其名稱結尾為 .user),然後選擇 [屬性]。 該屬性工作表的 [屬性頁] 對話方塊隨即開啟。

  2. 在對話方塊的左窗格中,選取 [使用者巨集]。 在右窗格中,選擇 [新增巨集] 按鈕以開啟 [新增使用者巨集] 對話方塊。

  3. 在對話方塊中,指定巨集的名稱和值。 或者,選取 [設定此巨集作為建置環境中的環境變數] 核取方塊。

屬性編輯器

您可以使用屬性編輯器,修改特定字串屬性和選擇巨集做為值。 若要存取屬性編輯器,請選取屬性頁上的屬性,然後選擇右邊的向下箭號按鈕。 如果下拉式清單包含 [<編輯>],則可以選擇它來顯示該屬性的屬性編輯器。

[VC++ 目錄] 的 Visual Studio 專案屬性頁螢幕擷取畫面。

[Include 目錄] 設定的屬性編輯器已開啟。 它會顯示 [Include 目錄] 的評估值,也就是 C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\Include。 它會顯示兩個繼承的值:$(VC_IncludePath) 和 $(WindowsSDK_IncludePath)。 已選取 [從父代或專案預設值繼承] 的核取方塊。

在屬性編輯器中,您可以選擇 [巨集] 按鈕來檢視可用巨集及其目前值。 下圖顯示選擇 [巨集] 按鈕之後,[其他 Include 目錄] 屬性的屬性編輯器。 當 [從父代或專案預設值繼承] 核取方塊已選取,而且您新增新值時,這個值會附加至目前繼承的任何值。 如果您清除此核取方塊,則新值會取代繼承的值。 在大部分情況下,讓核取方塊保持已選取狀態。

選取 [巨集] 按鈕之後 [屬性編輯器] 對話方塊的螢幕擷取畫面。

[Include 目錄] 的屬性編輯器已開啟。 評估的值會連同繼承的值一起顯示。 清單方塊包含各種巨集及其值,例如設定為 Unicode 的 $(CharacterSet)。

將 Include 目錄加入至一組預設目錄

當您將 Include 目錄加入至專案時,注意不要覆寫所有的預設目錄。 正確新增目錄的方式是附加新路徑 (例如 "C:\MyNewIncludeDir\"),然後將 $(IncludePath) 巨集附加至屬性值。

快速瀏覽和搜尋所有屬性

[所有選項] 屬性頁 (在 [屬性頁] 對話方塊中的 [組態屬性]>[C/C++] 節點底下) 提供快速的方式,讓您瀏覽和搜尋目前內容中可用的屬性。 其中有特別的搜尋方塊和協助篩選結果的簡單語法:

沒有前置詞:
只在屬性名稱中搜尋 (不區分大小寫的子字串)。

'/' 或 '-':
只在編譯器參數中搜尋 (不區分大小寫的前置詞)

v
只在值中搜尋 (不區分大小寫的子字串)。

設定組建的環境變數

MSVC 編譯器 (cl.exe) 會辨識特定環境變數,特別是 LIBLIBPATHPATHINCLUDE。 當您使用 IDE 進行建置時,在 VC++ 目錄屬性頁中設定的屬性會用來設定這些環境變數。 如果已經設定 LIBLIBPATHINCLUDE 值 (例如,透過開發人員命令提示字元),這些值會取代為對應 MSBuild 屬性的值。 組建接著會在 PATH 之前加上 [VC++ 目錄] 可執行檔目錄屬性的值。 您可以設定使用者定義的環境變數,做法是建立使用者定義巨集,然後核取顯示 [設定此巨集作為建置環境中的環境變數] 的方塊。

設定偵錯工作階段的環境變數

在專案的 [屬性頁] 對話方塊的左窗格中,展開 [組態屬性],然後選取 [偵錯]

在右窗格中,修改 [環境] 或 [合併環境] 專案設定,然後選擇 [確定] 按鈕。

本節內容

共用或重複使用 Visual Studio 專案設定
如何使用可共用或重複使用的自訂組建設定建立 .props 檔案。

專案屬性繼承
描述建置流程中 .props.targets.vcxproj 檔案和環境變數的評估順序。

修改屬性和目標而不變更專案檔
如何建立暫存組建設定,而不需要修改專案檔。

另請參閱

Visual Studio 專案 - C++
.vcxproj.props 檔案結構
屬性頁面 XML 檔案