C++ 應用程式外掛程式與設定快取不相容。

C++ 應用程式外掛程式提供建置 C++ 應用程式的任務、設定和慣例。

使用方式

build.gradle.kts
plugins {
    `cpp-application`
}
build.gradle
plugins {
    id 'cpp-application'
}

建置變異

C++ 應用程式外掛程式了解下列面向。請參閱建置變異簡介以取得更多資訊。

建置類型 - 始終為 偵錯發布

建置類型控制產生的二進位檔的可偵錯性以及最佳化。

  • 偵錯 - 產生偵錯符號,且不最佳化二進位檔

  • 發布 - 產生偵錯符號並最佳化,但從二進位檔中萃取偵錯符號

目標機器 - 預設為建置主機

目標機器表示應用程式預期執行的機器。目標機器由其作業系統和架構識別。Gradle 使用目標機器來決定根據主機機器的可用性選擇哪個工具鏈。

目標機器可以如下設定

build.gradle.kts
application {
    targetMachines = listOf(machines.linux.x86_64,
        machines.windows.x86, machines.windows.x86_64,
        machines.macOS.x86_64)
}
build.gradle
application {
    targetMachines = [
        machines.linux.x86_64,
        machines.windows.x86, machines.windows.x86_64,
        machines.macOS.x86_64
    ]
}

工作

下圖顯示此外掛程式新增的工作之間的關係。

cpp application task graph
圖 1. C++ 應用程式外掛程式預設工作圖

與變異相關的工作

C++ 應用程式外掛程式會根據應用程式元件的變異建立工作。請閱讀 建置變異簡介 以取得更多資訊。下圖顯示與變異相關工作之間的關係。

cpp application variant task graph
圖 2. C++ 應用程式外掛程式與變異相關的工作圖
編譯變異Cpp (例如 編譯偵錯Cpp編譯發布Cpp) - CppCompile

依賴於:所有將原始檔提供給編譯的工作 :: 使用所選的編譯器編譯 C++ 原始檔。

連結變異 (例如 連結偵錯連結發布) - LinkExecutable

依賴於:所有提供連結可執行檔的工作,包括來自透過專案相依性解析的專案的 連結變異建立變異 工作 :: 使用所選的連結器從編譯的物件檔連結可執行檔。

安裝變異 (例如 安裝偵錯安裝發布) - InstallExecutable

依賴於:連結變異 和所有提供可執行檔執行時期相依性的工作,包括來自透過專案相依性解析的專案的 連結變異 工作 :: 安裝可執行檔及其所有執行時期相依性以利於輕鬆執行。

assembleVariant(例如 assembleDebugassembleRelease) - 任務(生命週期)

依賴於:linkVariant :: 聚合組裝此應用程式特定變體的任務。

生命週期任務

C++ 應用程式外掛程式會將部分任務附加到 基本外掛程式章節 中記載的標準生命週期任務,而 C++ 應用程式外掛程式會自動套用這些任務。

assemble - 任務(生命週期)

依賴於:linkDebug :: 聚合任務,用於組裝專案中目前主機(如果存在)的應用程式偵錯變體。此任務由 基本外掛程式 新增。

check - 任務(生命週期)

聚合任務,用於執行驗證任務,例如執行測試。有些外掛程式會將自己的驗證任務新增到 check。例如,C++ 單元測試外掛程式 會將任務附加到此生命週期任務以執行測試。此任務由 基本外掛程式 新增。

build - 任務(生命週期)

依賴於:checkassemble :: 聚合任務,用於執行專案的完整建置。此任務由 基本外掛程式 新增。

clean - 刪除

刪除建置目錄及其中的所有內容,亦即專案屬性 layout.buildDirectory 指定的路徑。此任務由 基本外掛程式 新增。

相依性管理

就像 C++ 應用程式外掛程式建立的任務一樣,會根據應用程式元件的變體建立多組設定檔。請參閱 建置變體簡介 以取得更多資訊。下圖說明 C++ 應用程式外掛程式新增的設定檔

cpp application configurations
圖 3. C++ 應用程式外掛程式設定檔
  • 白色設定檔是使用者應使用來宣告相依性的設定檔

  • 粉紅色設定檔(也稱為可消耗設定檔,以 (C) 表示)是在元件針對程式庫執行時使用的設定檔

  • 以藍色顯示的組態,也稱為可解析,由 (R) 表示,是元件內部使用的

下列組態用於宣告相依性

implementation

用於宣告主元件所有變形的實作相依性。這是您應該宣告任何變形相依性的位置。

main變形Implementation(例如 mainDebugImplementationmainReleaseImplementation)延伸 implementation

用於宣告主元件特定變形的實作相依性。這是您應該宣告特定變形相依性的位置。

下列組態由依賴應用程式元件的下游使用者使用

變形RuntimeElements(例如 debugRuntimeElementsreleaseRuntimeElements) 延伸 `main變形Implementation

用於執行應用程式。此組態供使用者用於擷取執行應用程式所需的所有元素。

下列組態由應用程式本身使用

cppCompile變形(例如 cppCompileDebugcppCompileRelease)延伸 main變形Implementation

用於編譯應用程式。此組態包含應用程式的編譯包含根目錄,因此在呼叫 C++ 編譯器進行編譯時使用。

nativeLink變形(例如 nativeLinkDebugnativeLinkRelease)延伸 main變形Implementation

用於連結應用程式。此組態包含應用程式的函式庫,因此在呼叫 C++ 連結器進行連結時使用。

nativeRuntime變形(例如 nativeRuntimeDebugnativeRuntimeRelease)延伸 main變形Implementation

用於執行應用程式。此組態包含應用程式的執行時期函式庫。

慣例

C++ 應用程式外掛程式會新增下列來源和任務的慣例。

專案配置

C++ 應用程式外掛程式假設下列專案配置。這些目錄都不需要存在或包含任何內容。C++ 應用程式外掛程式會編譯它找到的任何內容,並忽略任何遺失的內容。

src/main/cpp

副檔名為 .cpp.c++.cc 的 C++ 來源

src/main/headers

標頭 - 編譯應用程式所需的標頭

您可以透過在 application 腳本區塊分別設定 sourceprivateHeaders設定專案配置

compileVariantCpp 任務

C++ 應用程式外掛程式會為應用程式元件的每個變異新增一個 CppCompile 執行個體,以進行建置(例如 compileDebugCppcompileReleaseCpp)。請參閱建置變異簡介以取得更多資訊。以下是部分最常見的設定選項。

compilerArgs

[]

debuggable

true

includes

configurations.cppCompileVariant + application.privateHeaders

macros

[:]

objectFileDir

layout.buildDirectory.dir("obj/main/$variant")

optimized

false(針對偵錯建置類型)或 true(針對其他類型)

positionIndependentCode

false

source

application.cppSource

systemIncludes

從工具鏈衍生

targetPlatform

從二進位檔的 TargetMachine 衍生

toolChain

根據目標機器自動選取

C++ 應用程式外掛程式會為應用程式的每個變異新增一個 LinkExecutable 執行個體,例如 linkDebuglinkRelease。請參閱建置變異簡介以取得更多資訊。以下是部分最常見的設定選項。

debuggable

true

libs

configurations.nativeLinkVariant

linkedFile

layout.buildDirectory.dir("exe/main/$variant/baseName")(*nix)或 layout.buildDirectory.dir("exe\main\$variant\baseName.exe")(Windows)

linkerArgs

[]

source

compileVariantCpp.objects

targetPlatform

從二進位檔的 TargetMachine 衍生

toolChain

根據目標機器自動選取

installVariant 任務

C++ 應用程式外掛程式會為測試元件的每個變異新增一個 InstallExecutable 執行個體,例如 installDebuginstallRelease。請參閱建置變異簡介以取得更多資訊。無需設定任務上的任何屬性。