C++新插件的更新功能简要介绍

158 阅读4分钟

由于新的C++插件得到了早期采用者的更多关注,我们想更新一下自我们之前介绍新C++插件的帖子以来的进展。

在过去的几个月里,我们看到了一些新的功能,新的和扩展的文档,以及对IDE支持的改进。

如果你想提供反馈,请与我们联系。

新功能

上一篇博文中,我们引入了三个主要的新功能:C++项目的启动模板、目标机建模和源码依赖性。

C++项目的初始模板

现在开始一个新的C++项目比以前更容易了。

Build Init插件init 任务添加的C++启动模板,你可以初始化一个C++应用程序C++库。下面是一个使用Kotlin DSL和Build Init插件初始化一个C++应用程序的例子:

Starting C++ Application with the init task

操作系统和架构支持

本地项目现在也可以在C++组件上配置操作系统和架构(也就是目标机)。

每个组件脚本块(如应用程序unitTest)都可以配置targetMachines 属性。配置的目标机将参与与构建主机兼容的机器的构建变体。例如,在Windows机器上配置targetMachines ,会产生x86和x86-64架构的专用任务。

plugins {
    id "cpp-application"
}

application {
    targetMachines = [machines.windows.x86, machines.windows.x86_64]
}

在Windows机器上,所有任务的变体将为x86和x86-64架构创建。 如下面的截屏所示,assemble 任务编译调试x86-64变体,也被称为开发二进制。

Building C++ Application on Windows

其他的变体{debug, x86},{release, x86}, 和{release, x86-64} 分别可以通过linkDebugX86,linkReleaseX86, 和linkReleaseX86-64 任务来编译。

在其他操作系统上,Gradle不会构建任何东西,因为没有目标机器与构建主机兼容。值得注意的是,前面提到的任务都不会被创建,因为这些变体是不可构建的。相反,调用assemble任务会简单地打印一条信息,如下面的截屏中所示:

Building C++ Application on macOS

源码依赖性

对源码依赖的支持直到最近才被宣布为一项功能。 你可以在介绍源码依赖关系的帖子中读到它的全部内容。

简而言之,源码依赖允许Gradle直接从源码中使用其他项目作为依赖。 对于C++开发者来说,从源码中构建依赖是一种常见的做法。Gradle在构建消费者之前就已经处理好了构建源码所需的所有线路。

如果源码依赖的构建是Gradle的构建,那么体验将类似于复合包含的构建。 另一方面,如果源码依赖是由另一个构建系统构建的,比如CMake,Gradle可以注入配置代码来执行正确的构建命令并将工件映射到Gradle的构建中。

文档

在通往Gradle 5.5的道路上,我们又发布了不少样本,展示了用C++插件已经可以实现的东西。

其中一些样本展示了有趣的用例,如与CMake的集成,以及如何从供应商的网站自动下载和使用工具链,如Clang

Integration with CMake

在Gradle 5.5中,我们发布了所有新的C++文档。 我们建议阅读构建C++项目测试C++项目这两章来开始学习。

我们也很高兴为每个本地插件以及Visual Studio和Xcode插件引入参考章节

IDE支持

Visual Studio插件支持为使用新C++插件的项目生成解决方案文件:

image.png

JetBrains建立在他们著名的从IntelliJ导入的本地Gradle之上,并发布了支持在Clion内部使用工具API直接打开Gradle本地项目

这种体验就像用户所期望的那样。你可以在写代码的同时构建、调试,完成代码。

Clion IDE

新的C++插件还支持Xcode的IDE开发。

提供反馈

这些插件是一个进展中的工作,有一些限制。

例如,像调试性这样的模型元素还不允许任何配置。你需要借助于使用编译器/链接器的标志。

我们将继续改进这些插件,使其稳定,并最终废弃软件模型插件。

请试用这些插件,并让我们知道你的想法。最简单的方法是克隆本地样本库并按照说明进行操作。 我们的样本使用Gradle夜间构建,所以你会在那里看到最新和最前沿的发展。

我们很想听听你认为哪些地方做得好,哪些地方让人困惑,哪些地方的缺失会阻碍你使用Gradle来构建C++软件。 你也可以在Gradle论坛上留下反馈,或者在Gradle本地GitHub仓库上提出问题。