CLion 2020.2:支持Makefile设计模型,更多的C ++ 20和更多

哈Ha!



我们的团队度过了非常繁忙的夏天,今天我们急于分享其结果。因此,欢迎CLion 2020.2的新版本!



CLion发行



简要介绍新版本中包含的内容



  • Makefile设计模型支持。
  • CMake的最新更新。
  • C++20: explicit(bool), (designated initializers), for .
  • : (dangling pointers), , , , .
  • -: doctest, Catch2 Google Test. .
  • PlatformIO .
  • .
  • .
  • .


Makefile



在今年春天庆祝CLion成立五周年之后,我们立即参与了IDE中最令人期待的功能的积极完成-对基于Makefile的项目的支持。在此之前,我们只有一个粗略的原型,然后将其提供给最勇敢的用户进行私下尝试。多亏了他们,我们才能够在大量的Makefile项目中测试原型,修复其中的许多问题,并了解我们解决方案的当前(希望是暂时的)局限性。我们的目标是允许用户使用CLion中的Makefile项目以及所有智能IDE功能,例如导航,重构,静态代码分析等。



简而言之,当前的方法如下所示:CLionmake在项目上运行带有附加选项的命令--just-print以节省实际组装时间。如果CLion可以成功解析命令输出,则将打开项目,一切正常!



让我们立即保留一下,CLion中的Makefile支持工作还远远没有完成-仍然存在许多已知的局限性和缺陷。最值得注意的是:



  • 不支持使用libtool(CPP-19549),distcc和ccache(CPP-19305)以及其他包装从输出中“隐藏”编译标志或干扰命令输出的包装器的项目make
  • CLion尚不能处理非GNU Makes输出(例如NMake,BSD)(CPP-18723)。
  • 不支持在构建过程中禁用目录名称列表的项目,因此CLion无法确定哪些文件特定于哪些构建命令。


但是即使是当前的解决方案也已经允许您在CLion中打开Linux内核或PostgreSQL数据库服务器代码。如果您有兴趣,那么可以在此页面上找到我们的原型可以运行的当前项目列表(以及某些无法正常运行的项目,存在所指出的问题)



尝试您的项目非常容易:



  1. 准备一个项目以便为其获取Makefile(例如,在许多情况下,您需要启动它./configure,因为CLion本身尚不知道如何执行此操作)。
  2. 使用文件|打开项目。打开并指定包含主项目Makefile或直接包含此文件本身的目录。确认要作为项目打开。
  3. CLion , Clean. , make , .
  4. , , ! Build.


posgres负载



输出可能包含一些警告,但是如果下载总体上成功完成(第一个任务旁边应该有绿色标记),则可以在CLion中使用该项目。



引导命令参数设置,用于引导的工具链以及其他选项可在“设置” /“首选项” |“设置”中找到。构建,执行,部署| Makefile:



Makefile选项



要运行和调试Makefile应用程序,您将需要创建其他Makefile应用程序配置。在这种情况下,可以从下拉列表中选择目标-CLion会告诉您存在哪些选项:



Makefile应用程序配置



在我们的英文博客中,您可以找到有关在CLion中使用Makefile项目的更多信息我们还建议您观看简短的演示(英语):





CMake的最新更新



正如统计数据所示,C ++开发人员中目前最受欢迎的三种设计模型是CMake,msbuild和Makefile。正是CMake连续三年领先该评级并持续增长。因此,我们正在不断更新CLion禁止使用的CMake版本,并致力于支持CMake本身的最新创新。这次我们将版本更新为3.17,并相应地增加了对两个新的有用CMake功能的支持:



  • Ninja Multi-Config ( Debug Release) Ninja ( -G "Ninja Multi-Config"). CLion , CMake . UI, .
  • CMake预编译头文件值得更多关注。总的来说,预编译头文件(PCH)的想法并不是什么新鲜事物,并且已经被编译器支持很长时间了。CLion在PCH中也已经存在了一段时间。现在,您不必记住PCH的编译器标志,并以您自己的方式将它们传递给CMake到每个特定的编译器,而只需通过命令将头文件添加到PCH目标变量target_precompile_headersCLion 2020.2现在可以使用此功能:



    CMake的PCH


同样值得一提的是能够从CLion在目录中打开CMake项目并生成CMake的结果,现在不仅适用于Makefile生成器,而且还适用于其他任何生成器!节省时间-在CLion中打开已构建的项目,而无需在项目上重新启动CMake命令。



C ++ 20



您是否知道,根据我们的数据,今年已经有12%的C ++开发人员使用C ++ 20标准?因此,我们当然会积极努力以支持CLion中的新功能。但是,让我们首先记住CLion中语言引擎的功能。



因此,目前有两种-分别基于C / ++的内置Java和Kotlin,以及基于Clangd的全新(我们使用CLion进行开发)。现在,所有努力都投入到基于Clangd的引擎中。尽管尚无法对整个项目执行任何操作(例如重构),但这似乎是一个很好的前景-由于任何特定的优化和延迟的解析,当然还有由于存在缓存,此处基于Java的引擎甚至不完美,有时运行缓慢重构所需的符号。



但是Clangd有一个很大的优点-整个社区都在那里工作,以支持Clang中最新的C ++标准,因为该项目是开放的。当然,这并不意味着我们根本不需要做任何事情-无论如何,这种支持仍然需要适应CLion的需求。但是,这比从头开始编写对C ++功能的支持要容易得多!并且在Clang的支持基础上,您可以编写自己的特定分析或做一些特殊功能(例如,我们在几个版本之前对Concepts进行了自动补全)。



我们确保LLVM附带的Clangd引擎的最新更新在C ++ 20代码中表现得更稳定,并且通常,根据我们的内置统计数据,Clangd引擎已变得更加稳定。因此,从设置中删除了完全禁用Clangd引擎的功能。而是添加到“设置/首选项” |语言和框架| C / C ++ |有关构建引擎的修订版本的信息。现在您知道在支持C ++和分析内置Clang-Tidy方面可以从中得到什么:



LLVM版本



顺便说一下,在我们的在线帮助中,有一篇很棒的文章对两个引擎在支持C ++功能方面进行了比较分析。



现在,关于C ++ 20支持中实际添加的内容:



  • 代码完成对C ++ 20个关键字:char8_tconsteval,和constinitco_awaitco_return,和co_yield
  • 完成指定初始化程序中基类的字段:



    指定初始化
  • explicit(bool)现在,该结构已正确突出显示,其中包含名称提示,导航和重构:



    显式布尔
  • 对于for带有初始化程序的基于范围的循环,可以对循环变量进行重命名重构。




静态代码分析器



在上一个版本中,我们将最“繁重”的分析(数据流分析)转移到了基于Clangd的引擎上。这主要是为了提高性能。但是,通常在重构过程中会发现许多问题和不准确之处。因此,在2020.2版中,我们继续改进此分析并修复其中的错误:



  • , , .
  • DFA Simplify code Loop condition is never updated. , :



    简化设定



    , :



    简化



    - , . , Clang-Tidy (clang-tidy:bugprone-infinite-loop), - . CLion :



    循环条件
  • CLion (dangling pointers)! (, ), :



    悬空指针
  • , Concepts C++20, - auto, :



    功能结果的概念约束




在此版本中,每个人都喜欢的Inspection Hector(我们的一些用户甚至尝试嘲笑)都变成了位于编辑器区域右上角的新的Inspection Widget。现在,可以找到用于设置背光源级别的选项(从显示所有问题到完全禁用代码分析器),并且当您单击时,将打开此文件的静态分析结果窗口:



检查小部件和问题视图



单元测试



这里已经提到的研究已经不止一次地表明,有34%的C ++开发人员没有编写任何单元测试。我想相信,作为回报,他们以其他方式进行测试。问题的一部分是C ++没有标准的设计模型或标准的依赖管理器,这意味着向您的项目中添加单元测试框架并不容易。但是现在所谓的仅标头框架变得特别流行,它很容易连接到您的项目-添加标头文件并编写自己的测试。就我们而言,在IDE中,我们尝试支持尽可能多的选项。在此版本中,doctest已从Google Test,Catch,Boost.Test添加到集合中。顺便说一句,我们前段时间有一个来宾博客从其作者Viktor那里谈到了该框架的优势。



CLion支持包括以下常规事项:



  • 自动测试检测。
  • 自动创建用于运行和调试测试的配置。
  • 在一个特殊的内置窗口中输出测试结果,该窗口带有各种过滤和排序选项,并且一键即可转换到测试源代码。
  • 编辑器中左窗格中的图标,用于运行测试并标识上次运行的测试状态。


doctest配置



Google Test和Catch2支持也已更新:



  • Catch2现在支持模板测试。
  • 对于Google Test,支持macro GTEST_SKIP(),如果您希望能够跳过某些测试(例如在特定环境中),该非常有用。




有关我们律师改进单元测试支持的简短概述视频(顺便说一下,Catch / Catch2框架的作者):





警告您有关CTest的问题:使其变得更加困难,因为这不是“常规”框架,而是以某种形式运行某种测试形式的抽象。但是我们计划最早在2020.3中进行一些集成!





也许是讨论最有趣的,现在简要介绍一下其余的内容。我们应该从此开始,但是CLion 2020.2包括了许多小的但重要的对编辑器性能的改进,以及对编辑器挂起的修复。例如,一种这样的改进是在Enter 宏定义内部按下时插入反斜杠。看来这有助于提高编辑人员的工作效率?事实是,新行很可能是当前宏的定义的一部分,插入反斜杠可以避免不必要地重新解析一堆代码,从而避免编辑器的刹车。



除了:



  • PlatformIO — , platformio.ini CMake .
  • , IntelliJ . : GitHub Pull Requests Git WSL2 ( WSL2, CLion Git ).
  • 就2020.2中的调试器而言,我们的工作量少于计划。基本上,所有大任务都已推迟到2020.3(以root身份调试,调试核心转储)。但是在此版本中,我们已将禁止的GDB版本升级到9.2,并且还更新了GDB STL漂亮打印机。在基于LLDB的Microsoft Visual C ++工具链调试器中,已经进行了功能,性能和稳定性方面的许多改进。


今天就这些。你读到最后了吗?非常感谢您的关注!尝试一下,在评论中写下问题,建议,感叹号-我们始终乐于阅读并回答!



CLion团队

发展动力



All Articles