百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

C/C++ 开发工具 CLion 新版发布,10 大新功能抢先看

itomcoil 2024-12-29 03:54 43 浏览

距上次更新 1 年后,Jetbrains 旗下的 C/C++ 开发工具 CLion 迎来新版——CLion 2020.1 。

据官方介绍,CLion 2020.1 针对许多 IDE 功能带来诸多改进,比如语言支持、 the debugger(调试器)、the formatter(格式化器)和 refactorings(重构)等。

“除 Windows 开发人员,嵌入式和 CUDA 项目的开发人员也能体会到 CLion 为他们带来的好处。”Jetbrains 写道。

CLion(30 天免费试用版)的下载地址。

1. 嵌入式开发

IAR 工具链

如果你在嵌入式项目中使用 IAR 编译器 / 工具链,那现在,你在 CLion 中也可以这样做了。收集编译器信息不会再出现失败,这意味着使用 IAR 工具链的项目将会成功加载,并在 CLion 中运行。

这有几点事项要注意:

  • MinGW 是必需的。
  • 关于在 IAR Embedded Workbench 使用 CMake 的一些技巧。

PlatformIO

PlatformIO 是正在迅速普及的新一代生态系统。要在你的嵌入式项目里从中受益,请利用新的 PlatformIO for CLion 插件,该插件具有以下新功能:

  • 将 PlatformIO 项目类型添加到“New Project”(新建项目)向导中。
  • 生成基于 CMake 的相应 PlatformIO 项目。
  • 自动创建用于调试和上载的配置。
  • 允许在线通过 PIO Unified Debugger(统一调试器)在 CLion 中进行调试。

还有更多新功能,请查看官方文档了解更多细节。

2.CUDA 支持

代码解析和代码辅助

在 CUDA C 和 C++ 中的代码,包括所有 CUDA 特定的扩展,现在可以正确地解析并高亮显示了。这意味着代码导航、软件文档和其他代码辅助操作在 CUDA 代码中都能正常工作。此外,CLion 还可以完成内核调用的尖括号。

让我们从 GitHub 克隆 ClaraGenomicsAnalysis 项目,看看 CLion 在 CUDA 支持方面的能力。

新建项目向导

CLion 中的“New Project”(新建项目)向导已经更新,增加了创建 CUDA 项目的新选项:Library (库) 或 Executable (可执行文件)。选中该选项后,它将生成示例 CMakeLists.txt 和 main.cu 文件。

文件扩展名和 CMake 目标

在 “New C/C++ Source File”(新建 C/C++ 源文件)对话框中新增了 CUDA 文件扩展名的支持:.cu 和 .cuh。这个对话框要更新的可能目标列表包括常规 CMake 和 CUDA 特定目标(使用 cuda_add_executable 和 cuda_add_library 命令创建)。

点此处了解更多信息。

3.Windows 环境下的开发

Clang-cl

我们现在已经可以在 Windows 上使用 CLion 中的 Clang-cl,支持 8.0 及以后的版本。

你能从 LLVM 网站或与 Visual Studio 工具一起安装。安装完成后,在 CLion 中选择 Visual Studio 工具链,然后在工具链设置中指向 clang-cl.exe。

Visual Studio C++ 工具链的调试器

JetBrains 为 Visual Studio C++ 工具链开发的基于 LLDB 的调试器,现在它已经是该工具链的默认调试器。因此你可以马上开始使用。

注意,要明确启用对原生可视化工具的捆绑支持,应该这样开启:Settings(设置)| Build(构建)、Execution(执行)、Deployment(部署)| Debugger Data Views(调试器数据视图)| Enable NatVis renderers for LLDB(启用 LLDB 的 NatVis 渲染器)。

4. 运行和调试配置

远程和嵌入式 GDB 的自定义目标

Remote GDB Server(远程 GDB 服务器)和 Embedded GDB Server (嵌入式 GDB 服务器) 配置现在可用于自定义目标了。这些配置以前只适用于 CMake 目标,让你能从本地计算机上运行的 CLion 实例中调试远程主机或微控制器上的应用程序。

如果你已经创建了这些配置,CLion 2020.1 将在项目文件夹中的 projectFilesBackup 目录中存储以前的 Run/Debug Configuration(运行 / 调试配置)设置,并将就此通知你。

支持在运行 / 调试配置中使用宏和路径变量

现在,你能在 CMake、Custom Build(自定义构建)和 Gradle Native Applications(Gradle 本地应用)配置中的 Program Arguments(程序参数)和 Working Directory(工作目录)字段中使用 Path Variables(路径变量)和宏了。宏可以帮助你获取以下对象的值:

  • 当前 CMake 运行配置的构建目录。
  • 当前 CMake 运行配置的生成目录。
  • 项目文件目录。
  • 还有许多其他。

FilePrompt/Prompt 宏可以用来在运行 / 调试配置时显示文件选择对话框或字符串输入对话框。

Path Variable(路径变量)可以定义库的路径,该库在项目中广泛使用,但不在项目文件目录之中。

输入重定向

如果需要将输入从文件重定向到应用程序的 STDIN,现在可以这样做了。在配置中使用名为 Redirect input from 的新字段。输入:

  • 相对路径(CLion 将以 Working directory path(工作目录路径)为前缀)。
  • 绝对路径(将为远程配置重新映射)。
  • 或宏(如 FilePrompt)。

5.Clang 工具

Clangd 上的数据流分析

CLion 的 Data Flow Analysis (DFA,数据流分析)能完成编译器通常不能做的事情:它分析数据如何流经代码,并根据结果检测潜在问题。它可以捕获始终为 false/true 的条件、无限循环、缺失的返回声明、无限递归,等等。在 2020.1 版本中,DFA 已经转移到基于 Clangd 的语言引擎上,在性能上变得更加准确,也更加精简。尽管这项工作仍在进展之中,但已经取得了一些好成果!

仅靠 Clangd 即可实现代码补全

默认情况下开启了一种新的模式,在这种模式下,基于 Clangd 的语言引擎完全提供完整结果。这种模式解决了当多个引擎的代码完成结果混合在一起时出现的优先级和排序问题。这种行为是由 Settings(设置)|Languages & Frameworks(语言和框架)|C/C++|Clangd 中的 Code Completion(代码完成)设置控制的。

这个新模式因几十种不同的修复和增强功能更准确、更强大。

点此处了解更多信息。

ClangFormat

现在,当你第一次打开项目根目录中包含 .clang-format 的配置文件的项目时,CLion 将检测到该项目并自动切换到 ClangFormat。

如果你在没有 .clang-format 配置文件的项目上启用了 ClangFormat,CLion 会建议为你创建一个。

Clang-Tidy

当在项目中检测到 .clang-tidy 配置文件时,CLion 现在会自动关闭 Clang-Tidy 的 IDE 设置的使用。这一行为是由 Prefer.clang-tidy 文件控制的,而不是通过 IDE 设置中的 Settings(设置)|Editor(编辑器)|Inspections(检查)|C/C++|General(通用)|Clang-Tidy 控制。

6. 代码格式化器和代码折叠

新的命名设置

结构成员字段和类成员字段现在有了单独的命名设置。在 Settings(设置)|Editor(编辑器)|Code Style(代码风格)|C/C++|Naming Convention (命名约定)中查看。

代码折叠

#pragma region 和 #pragma endregion 可用于 CLion 的代码折叠。

7. 重构更新

在调用 Change Signature 进行重构(Ctrl+F6)时,CLion 将会更新该函数的所有用法。Change Signature 对话框中的一个新的 Default value 字段提供了指定要在所有用法中使用的参数值的功能。保持为空,以便像以前一样使用默认值类型。

相同的逻辑和新的 Default value (默认值)字段应用于 Create Parameter From Usage(根据使用情况创建参数)的快速解决和 Add Parameter to Constructor(向构造函数中添加参数)的意图。

8. 编辑器

快速文档

Quick Documentation(快速文档)——一种通用的工具,可以预览文档,并获取有关函数签名、推断类型和宏替换的信息。它可以通过 Settings(设置)|Editor(编辑器)|Code Editing(代码编辑)中的“Show quick documentation on mouse move”(鼠标悬停显示快速文档)的设置进行控制。

JetBrains Mono 和 IntelliJ Light

编辑器中的默认字体已更改为 JetBrains Mono ,这是 JetBrains 创建的一种新的开源字体。它的设计是为了让阅读代码更容易。

IntelliJ Light,一种新的默认 light 主题,现在是所有不同操作系统的标准主题。如果你想选择一个非默认的主题,请使用 View(视图)|Quick Switch Scheme(快速切换组合)|Theme to select a non-default theme(选择非默认主题的主题)来选择非默认主题。

拆分终端会话

使用 CLion 2020.1,你可以垂直或水平拆分终端会话,这样就可以并排运行这些终端会话。你可以从终端调用上下文菜单来创建、导航和关闭拆分的终端会话。

9. 版本控制

新建提交工具窗口

更新后的工具窗口为修改后的文件列表和差异提供了更多的空间,还允许你在提交准备就绪时,将更改添加到提交中,迭代地编写提交消息,并选择将哪些分段更改进入哪个提交中。

新用户默认启用的是新的用户界面;而现有用户可以在 Settings(设置)|Version Control(版本控制)|Commit(提交)中切换到新的用户界面。

从此处以交互方式进行变基(rebase)提交

一个更新的、真正的交互式对话框使以下操作成为可能:

  • 选择要对分支中的每个提交执行的操作。
  • 检查显示已应用哪些操作的图表。
  • 查看提交详细信息。
  • 查看差异列表,并在必要时检查或重置更改。

从 IDE 中安装 Git

Version Control(版本控制)工具窗口现在称为 Git 工具窗口,或者 Subversion/Mercurial/Perforce(如果你使用这些窗口中任何一种而不是 Git 的话)。

你不再需要手动预装 Git 了!当你使用 Git 打开一个项目或从 VCS 导入一个项目时,如果你的机器上没有 Git 的话,CLion 会提供下载并安装 Git。

10.Rust 插件更新

通过对 LLDB 支持的改进, IntelliJ Rust 现在可以正确地渲染枚举类型和原始类型(primitive types),它还可以在调用堆栈中显示符号重组(demangle)的函数名。

该插件的另一个主要更新是 REPL 集成。从 Tools(工具)|Rust REPL调用控制台,并将其用于原型设计和逐行检查代码。该集成提供了语法高亮显示和代码完成功能,以及一些方面的控制台操作:命令历史记录、软换行、快速滚动到末尾等等。

在语言支持方面,IntelliJ Rust 现在可以处理类型别名的 impl 块。考虑到性能,我们只对别名数量有限的类型启用了这个功能。

其他增强功能还包括高亮显示未使用的本地变量、cfg 属性注重中的修复以及新的 Lift 返回检查。

其他改进

  • 现在,所有远程配置都可以使用通用和统一的 SSH Configurations(SSH 配置)用户界面了。无论新的 SSH 配置文件源自何处(远程工具链设置或远程 GDB 服务器配置),它都会在 Settings(设置)|Tools(工具)|SSH Configurations(SSH 配置) 有一个条目。
  • 如果你只想专注于源代码,你可以选择一种新的 Zen(禅宗)模式,它将无干扰模式与全屏模式结合在一起。要启用这个模式,请使用 View(视图)|Appearance(外观)|Enter Zen Mode(进入禅宗模式)。

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书!

相关推荐

Python编程实现求解高次方程_python求次幂
Python编程实现求解高次方程_python求次幂

#头条创作挑战赛#编程求解一元多次方程,一般情况下对于高次方程我们只求出近似解,较少的情况可以得到精确解。这里给出两种经典的方法,一种是牛顿迭代法,它是求解方程根的有效方法,通过若干次迭代(重复执行部分代码,每次使变量的当前值被计算出的新值...

2025-10-23 03:58 itomcoil

python常用得内置函数解析——sorted()函数

接下来我们详细解析Python中非常重要的内置函数sorted()1.函数定义sorted()函数用于对任何可迭代对象进行排序,并返回一个新的排序后的列表。语法:sorted(iterabl...

Python入门学习教程:第 6 章 列表

6.1什么是列表?在Python中,列表(List)是一种用于存储多个元素的有序集合,它是最常用的数据结构之一。列表中的元素可以是不同的数据类型,如整数、字符串、浮点数,甚至可以是另一个列表。列...

Python之函数进阶-函数加强(上)_python怎么用函数

一.递归函数递归是一种编程技术,其中函数调用自身以解决问题。递归函数需要有一个或多个终止条件,以防止无限递归。递归可以用于解决许多问题,例如排序、搜索、解析语法等。递归的优点是代码简洁、易于理解,并...

Python内置函数range_python内置函数int的作用

range类型表示不可变的数字序列,通常用于在for循环中循环指定的次数。range(stop)range(start,stop[,step])range构造器的参数必须为整数(可以是内...

python常用得内置函数解析——abs()函数

大家号这两天主要是几个常用得内置函数详解详细解析一下Python中非常常用的内置函数abs()。1.函数定义abs(x)是Python的一个内置函数,用于返回一个数的绝对值。参数:x...

如何在Python中获取数字的绝对值?

Python有两种获取数字绝对值的方法:内置abs()函数返回绝对值。math.fabs()函数还返回浮点绝对值。abs()函数获取绝对值内置abs()函数返回绝对值,要使用该函数,只需直接调用:a...

贪心算法变种及Python模板_贪心算法几个经典例子python

贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法策略。以下是贪心算法的主要变种、对应的模板和解决的问题特点。1.区间调度问题问题特点需要从一组区间中选择最大数...

Python倒车请注意!负步长range的10个高能用法,让代码效率翻倍

你是否曾遇到过需要倒着处理数据的情况?面对时间序列、日志文件或者矩阵操作,传统的遍历方式往往捉襟见肘。今天我们就来揭秘Python中那个被低估的功能——range的负步长操作,让你的代码优雅反转!一、...

Python中while循环详解_python怎么while循环

Python中的`while`循环是一种基于条件判断的重复执行结构,适用于不确定循环次数但明确终止条件的场景。以下是详细解析:---###一、基本语法```pythonwhile条件表达式:循环体...

简单的python-核心篇-面向对象编程

在Python中,类本身也是对象,这被称为"元类"。这种设计让Python的面向对象编程具有极大的灵活性。classMyClass:"""一个简单的...

简单的python-python3中的不变的元组

golang中没有内置的元组类型,但是多值返回的处理结果模拟了元组的味道。因此,在golang中"元组”只是一个将多个值(可能是同类型的,也可能是不同类型的)绑定在一起的一种便利方法,通常,也...

python中必须掌握的20个核心函数——sorted()函数

sorted()是Python的内置函数,用于对可迭代对象进行排序,返回一个新的排序后的列表,不修改原始对象。一、sorted()的基本用法1.1方法签名sorted(iterable,*,ke...

12 个 Python 高级技巧,让你的代码瞬间清晰、高效

在日常的编程工作中,我们常常追求代码的精简、优雅和高效。你可能已经熟练掌握了列表推导式(listcomprehensions)、f-string和枚举(enumerate)等常用技巧,但有时仍会觉...

Python的10个进阶技巧:写出更快、更省内存、更优雅的代码

在Python的世界里,我们总是在追求效率和可读性的完美平衡。你不需要一个数百行的新框架来让你的代码变得优雅而快速。事实上,真正能带来巨大提升的,往往是那些看似微小、却拥有高杠杆作用的技巧。这些技巧能...