C++ 應用程式外掛程式為建置 C++ 應用程式提供工作、配置和慣例。

用法

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

建置變體

C++ 應用程式外掛程式理解以下維度。閱讀建置變體介紹以獲取更多資訊。

建置類型 - 始終為debugrelease

建置類型控制可調試性以及產生的二進制檔案的優化程度。

  • debug - 產生調試符號且不優化二進制檔案

  • release - 產生調試符號並進行優化,但從二進制檔案中提取調試符號

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

目標機器表示應用程式預期運行的機器。目標機器由其作業系統和架構識別。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++ 應用程式外掛程式變體相關工作圖
compileVariantCpp (例如 compileDebugCppcompileReleaseCpp) - CppCompile

依賴於:所有為編譯貢獻原始碼檔案的工作 :: 使用選定的編譯器編譯 C++ 原始碼檔案。

linkVariant (例如 linkDebuglinkRelease) - LinkExecutable

依賴於:所有為連結可執行檔貢獻的工作,包括來自透過專案依賴關係解析的專案的 linkVariantcreateVariant 工作 :: 使用選定的連結器從編譯後的物件檔案連結可執行檔。

installVariant (例如 installDebuginstallRelease) - InstallExecutable

依賴於:linkVariant 和所有為可執行檔的運行時貢獻的工作,包括來自透過專案依賴關係解析的專案的 linkVariant 工作 :: 安裝可執行檔及其所有運行時依賴關係,以便於執行。

assembleVariant (例如 assembleDebugassembleRelease) - 工作 (生命週期)

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

生命週期工作

C++ 應用程式外掛程式將其某些工作附加到 Base Plugin 章節中記錄的標準生命週期工作 - C++ 應用程式外掛程式會自動應用這些工作

assemble - 工作 (生命週期)

依賴於:linkDebug :: 聚合工作,用於組裝專案中當前主機(如果存在)的 debug 變體應用程式。此工作由 Base Plugin 新增。

check - 工作 (生命週期)

聚合工作,用於執行驗證工作,例如運行測試。某些外掛程式會將它們自己的驗證工作新增到 check。例如,C++ Unit Test Plugin 將一個工作附加到此生命週期工作以運行測試。此工作由 Base Plugin 新增。

build - 工作 (生命週期)

依賴於:check, assemble :: 聚合工作,用於執行專案的完整建置。此工作由 Base Plugin 新增。

clean - 刪除

刪除建置目錄及其中的所有內容,即由 layout.buildDirectory 專案屬性指定的路徑。此工作由 Base Plugin 新增。

依賴管理

就像 C++ 應用程式外掛程式建立的工作一樣,會根據應用程式元件的變體建立多個配置。閱讀建置變體介紹以獲取更多資訊。下圖描述了 C++ 應用程式外掛程式新增的配置

cpp application configurations
圖 3. C++ 應用程式外掛程式配置
  • 白色配置是用戶應用於宣告依賴關係的配置

  • 粉紅色配置,也稱為可消費配置 (C),是元件針對程式庫運行時使用的配置

  • 藍色配置,也稱為可解析配置 (R),是元件內部的配置,供其自身使用

以下配置用於宣告依賴關係

implementation

用於宣告主要元件所有變體的實作依賴關係。您應該在此處宣告任何變體的依賴關係。

mainVariantImplementation (例如 mainDebugImplementationmainReleaseImplementation) 擴展了 implementation

用於宣告主要元件特定變體的實作依賴關係。您應該在此處宣告特定變體的依賴關係。

下游消費者(依賴於應用程式元件)使用以下配置

variantRuntimeElements (例如 debugRuntimeElementsreleaseRuntimeElements) 擴展了 `mainVariantImplementation

用於執行應用程式。此配置旨在供消費者使用,以檢索運行應用程式所需的所有元素。

應用程式本身使用以下配置

cppCompileVariant (例如 cppCompileDebugcppCompileRelease) 擴展了 mainVariantImplementation

用於編譯應用程式。此配置包含應用程式的編譯包含根目錄,因此在調用 C++ 編譯器來編譯它時使用。

nativeLinkVariant (例如 nativeLinkDebugnativeLinkRelease) 擴展了 mainVariantImplementation

用於連結應用程式。此配置包含應用程式的程式庫,因此在調用 C++ 連結器來連結它時使用。

nativeRuntimeVariant (例如 nativeRuntimeDebugnativeRuntimeRelease) 擴展了 mainVariantImplementation

用於執行應用程式。此配置包含應用程式的運行時程式庫。

慣例

C++ 應用程式外掛程式為來源和工作新增了慣例,如下所示。

專案佈局

C++ 應用程式外掛程式假定專案佈局如下所示。這些目錄都不需要存在或包含任何內容。C++ 應用程式外掛程式將編譯它找到的任何內容,並忽略任何缺失的內容。

src/main/cpp

C++ 原始碼,副檔名為 .cpp.c++.cc

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

debug 建置類型為 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。閱讀建置變體介紹以獲取更多資訊。無需在工作上配置任何屬性。