【gradle 插件系列】C++应用程序插件

本文详细介绍了Gradle的C++应用程序插件,涵盖构建变体、任务关系、依赖管理、项目布局以及cppCompileVariant、linkVariant和installVariant等关键任务的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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
    ]
}

任务

下图显示了该插件添加的任务之间的关系。

cpp application task graph

变体相关任务

C++应用程序插件基于应用程序组件的变体创建任务。有关更多信息,请阅读构建变体介绍。下图显示了变体相关任务之间的关系。

cpp application variant task graph

  • 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++应用程序插件添加的配置:

cpp application configurations

白色配置是用户应该用于声明依赖项的配置;粉色配置(用©表示)是库运行时使用的配置;蓝色配置(用®表示)是组件内部使用的配置。

以下配置用于声明依赖项:

  • 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/baseNamenix)或buildDir\exe\main\variant\baseName.exe(Windows)
  • linkerArgs:[]
  • source:compileVariantCpp.objects
  • targetPlatform:根据二进制文件的TargetMachine推导得出
  • toolChain:根据目标机器自动选择
installVariant任务

C++应用程序插件为每个测试组件的变体(例如installDebug和installRelease)添加了InstallExecutable实例。有关更多信息,请阅读构建变体介绍。在任务上不需要配置任何属性。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值