【gradle 插件系列】C++应用程序插件
文章目录
使用
要使用C++应用程序插件,请在构建脚本中包含以下内容:
plugins {
id 'cpp-application'
}
C++应用程序插件提供了构建C++应用程序所需的任务、配置和约定。
构建变体
C++应用程序插件理解以下维度。有关更多信息,请阅读构建变体介绍。
-
构建类型:始终为debug或release
- debug:生成调试符号,并且不对二进制文件进行优化
- release:生成调试符号并进行优化,但从二进制文件中提取调试符号
-
目标机器:默认为构建主机
- 目标机器表示应用程序希望运行的机器。目标机器由其操作系统和体系结构标识。Gradle根据主机上的可用性选择工具链时,使用目标机器来决定选择哪个工具链。
可以通过以下方式配置目标机器:
application {
targetMachines = [
machines.linux.x86_64,
machines.windows.x86, machines.windows.x86_64,
machines.macOS.x86_64
]
}
任务
下图显示了该插件添加的任务之间的关系。
变体相关任务
C++应用程序插件基于应用程序组件的变体创建任务。有关更多信息,请阅读构建变体介绍。下图显示了变体相关任务之间的关系。
- compileVariantCpp(例如compileDebugCpp和compileReleaseCpp) - CppCompile
- 依赖于所有贡献源文件到编译中的任务 :: 使用选择的编译器编译C++源文件。
- linkVariant(例如linkDebug和linkRelease) - LinkExecutable
- 依赖于所有贡献到链接可执行文件的任务,包括来自通过项目依赖解析的项目的linkVariant和createVariant任务 :: 使用选择的链接器从已编译的目标文件链接可执行文件。
- installVariant(例如installDebug和installRelease) - InstallExecutable
- 依赖于linkVariant和贡献到可执行文件的运行时的所有任务,包括通过项目依赖解析的项目的linkVariant任务 :: 安装可执行文件及其所有运行时依赖项,以便方便执行。
- assembleVariant(例如assembleDebug和assembleRelease) - Task(生命周期)
- 依赖于linkVariant :: 聚合组装特定变体的所有任务。
生命周期任务
C++应用程序插件将一些任务附加到Base插件文档中记录的标准生命周期任务上,C++应用程序插件会自动应用这些任务。
- assemble - Task(生命周期)
- 依赖于linkDebug :: 聚合任务,为当前主机(如果存在)中的应用程序的调试变体组装应用程序。该任务由Base插件添加。
- check - Task(生命周期)
- 执行验证任务的聚合任务,例如运行测试。一些插件会将自己的验证任务添加到check中。例如,C++单元测试插件会附加一个任务来运行测试。该任务由Base插件添加。
- build - Task(生命周期)
- 依赖于check、assemble :: 执行项目的完整构建的聚合任务。该任务由Base插件添加。
- clean - Delete
- 删除构建目录及其内容,即Project.getBuildDir()项目属性指定的路径。该任务由Base插件添加。
依赖管理
与C++应用程序插件创建的任务一样,基于应用程序组件的变体也创建了多个配置。有关更多信息,请阅读构建变体介绍。下图描述了C++应用程序插件添加的配置:
白色配置是用户应该用于声明依赖项的配置;粉色配置(用©表示)是库运行时使用的配置;蓝色配置(用®表示)是组件内部使用的配置。
以下配置用于声明依赖项:
- implementation:用于声明主组件所有变体的实现依赖项。在此处声明任何变体的依赖项。
- mainVariantImplementation(例如mainDebugImplementation和mainReleaseImplementation)扩展自implementation:用于声明主组件特定变体的实现依赖项。在此处声明特定变体的依赖项。
以下配置由依赖于应用程序组件的下游消费者使用:
- variantRuntimeElements(例如debugRuntimeElements和releaseRuntimeElements)扩展自mainVariantImplementation:用于执行应用程序。这个配置可用于消费者,以检索运行应用程序所需的所有元素。
以下配置由应用程序本身使用:
- cppCompileVariant(例如cppCompileDebug和cppCompileRelease)扩展自mainVariantImplementation:用于编译应用程序。该配置包含应用程序的编译包含根目录,并且在调用C++编译器进行编译时使用。
- nativeLinkVariant(例如nativeLinkDebug和nativeLinkRelease)扩展自mainVariantImplementation:用于链接应用程序。该配置包含应用程序的库,并且在调用C++链接器进行链接时使用。
- nativeRuntimeVariant(例如nativeRuntimeDebug和nativeRuntimeRelease)扩展自mainVariantImplementation:用于执行应用程序。该配置包含应用程序的运行时库。
约定
C++应用程序插件添加了源代码和任务的约定,如下所示。
项目布局
C++应用程序插件假定以下项目布局。这些目录无需存在或包含任何内容。C++应用程序插件将编译找到的所有内容,并忽略任何缺失的内容。
- src/main/cpp:C++源代码,扩展名为.cpp、.c++或.cc
- src/main/headers:头文件,用于编译应用程序
您可以通过配置application脚本块上的source和privateHeaders来配置项目布局。
compileVariantCpp任务
C++应用程序插件为每个应用程序组件的变体添加了CppCompile实例,以进行构建(例如compileDebugCpp和compileReleaseCpp)。有关更多信息,请阅读构建变体介绍。下面显示了一些常见的配置选项。
- compilerArgs:[]
- debuggable:true
- includes:configurations.cppCompileVariant + application.privateHeaders
- macros:[:]
- objectFileDir:$buildDir/obj/main/variant
- optimized:对于debug构建类型为false,否则为true
- positionIndependentCode:false
- source:application.cppSource
- systemIncludes:根据工具链推导得出
- targetPlatform:根据二进制文件的TargetMachine推导得出
- toolChain:根据目标机器自动选择
linkVariant任务
C++应用程序插件为每个应用程序的变体(例如linkDebug和linkRelease)添加了LinkExecutable实例。有关更多信息,请阅读构建变体介绍。下面显示了一些常见的配置选项。
- debuggable:true
- libs:configurations.nativeLinkVariant
- linkedFile: b u i l d D i r / e x e / m a i n / v a r i a n t / b a s e N a m e ( ∗ n i x )或 buildDir/exe/main/variant/baseName(*nix)或 buildDir/exe/main/variant/baseName(∗nix)或buildDir\exe\main\variant\baseName.exe(Windows)
- linkerArgs:[]
- source:compileVariantCpp.objects
- targetPlatform:根据二进制文件的TargetMachine推导得出
- toolChain:根据目标机器自动选择
installVariant任务
C++应用程序插件为每个测试组件的变体(例如installDebug和installRelease)添加了InstallExecutable实例。有关更多信息,请阅读构建变体介绍。在任务上不需要配置任何属性。