提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:董玉霞|2022-09-09 11:43:27.117|阅读 657 次
概述:CLion是一个 IDE,它提供了许多功能来帮助开发人员。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
CLion是一个 IDE,它提供了许多功能来帮助开发人员。它显示文档弹出窗口、动态检测错误、建议修复等。内部代码分析器始终在后台运行,在您键入时分析 C 和 C++ 代码。C 和 C++ 对于自动分析器来说是具有挑战性的语言,因为正确解析代码需要特定于编译器的数据。引擎需要知道标题搜索路径、预定义的宏定义和其他一些细节。
对于一组预定义的已知编译器,CLion 使用特殊选项运行项目的编译器,并在解析项目时收集所需的信息。当然,这只适用于有限数量的编译器,如 GCC、Clang、MSVC、IAR 及其衍生产品。如果项目使用特定的自定义编译器、很少使用的编译器或我们无法访问的专有编译器以正确集成它,那么 CLion 无法通过其标准过程使用它。在这种情况下,您可以选择使用自定义编译器功能。
要在 CLion 中使用自定义编译器,您需要一个包含必要编译器数据的 YAML 文件。这样的文件应该包含一个或多个部分,每个部分描述一个特定的编译器或编译器变体。每个部分都应该有一个描述、一个或多个匹配记录和几个信息记录。
当 CLion 解析项目并遇到项目文件的编译器时,CLion 会逐节扫描并检查编译器是否与记录匹配。匹配是使用一个或多个匹配记录完成的。可用的匹配记录包括:
一旦成功解决了所有匹配项,就会选择节信息记录,并跳过 YAML 文件的其余部分。编译器数据取自信息记录,然后直接传递给 CLion 的代码分析器;也就是说,在编译器试运行期间不会收集数据。
如果没有任何部分为 IDE 提供将记录与特定编译器正匹配的信息,它会尝试以通常的方式收集编译器数据——通过猜测编译器的类型并运行编译器。
要开始编写自定义编译器 YAML 文件,您需要确定有关编译器的以下详细信息:
让我们通过为SmallDevice C Compiler (SDCC)编写自定义编译器 YAML 文件来实践这个过程。SDCC 支持多种 8 位 CPU 架构,例如 STM8、Z80 等。该编译器是开源的,它是多个 MCU 系列的唯一免费编译器。在此示例中,我们将为其 Microchip PIC-16 变体(端口)编写一个 YAML 文件。
以下是我们需要了解的有关此编译器的详细信息:
我们将从创建一个测试项目开始。最小的项目包含一个 C 文件、YAML 文件本身和一个构建系统文件。我们将使用Makefile。如果应该使用 C++,那么还应该添加另一个用 C++ 编写的源文件。
首先,创建一个项目文件夹,在里面创建一个空的Makefile。
在 CLion 中打开该文件夹,然后在弹出的“加载项目”对话框中单击“取消”。
在 CLion 编辑器中打开Makefile并将最少的内容添加到该Makefile中:
clean: all: main.c sdcc -mpic16 --use-non-free -S main.c
该文件现在包含一个将 main.c 编译成汇编的命令,无需进一步的步骤。
创建一个main.c文件。让我们制作一个经典的“Hello, World”,添加 SDCC 特定的附加功能——__code关键字和预定义的宏__SDCC_pic16。
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } int __code i = 0; #ifndef __SDCC_pic16 # error "__SDCC_pic16 macro is expected to be defined" #endif
现在我们编写一个自定义编译器配置存根:
创建一个名为clion-custom-compiler-sdcc-pic16.yaml 的文件。
将 JSON 模式“自定义编译器定义”分配给文件。
自定义编译器方案已验证这样,CLion 可以帮助您进行即时文件结构验证和输入提示。架构名称显示在 IDE 状态栏中,可以通过单击名称来选择。
存根是:
compilers: - description: SDCC for PIC-16 match-compiler-exe: "(.*/)?sdcc(.exe)?"
目前,我们仅按名称匹配。它是一个匹配 Linux 和 Windows 编译器二进制名称的正则表达式,与包含的文件夹无关。
下一步是在 CLion 中使用我们的自定义编译器配置。打开设置/首选项 | 构建、执行、部署 | 工具链 | 自定义编译器。选中Use custom compiler config并选择项目的 YAML 文件作为配置文件。
在工具菜单中选择Makefile | 清理并重新加载 Makefile 项目。如果一切正常,构建工具窗口将显示项目已成功加载。
如果项目未正确加载,则应仔细检查 YAML 文件中的match-compiler-exe语句。记录值是一个正则表达式,它是过程中最脆弱的部分。
现在让我们检查一下 CLion 是否确实已经接受了 SDCC,并且我们的项目按预期工作。
在编辑器中打开main.c。此时可以看到一些错误。转到帮助 | 诊断工具并选择Show Compiler Info。这将打开一个诊断页面,其中包含正在编辑的文件的编译器信息。在这里您可以看到编译器类型(“自定义编译器”)和检测到的编译器描述(“SDCC for PIC-16”)。这意味着 CLion 知道项目结构,但代码分析器还没有所需的编译器数据,因此在main.c中显示各种错误。
main.c文件目前看起来已损坏。未找到stdio.hprintf ,未定义,__code修饰符错误,并且未定义文档中的预定义宏。
让我们通过提供正确的编译器信息来解决所有这些问题。
幸运的是,SDCC 可以打印标题位置和预定义的宏。将以下行添加到Makefile将起到作用:
gather_info: # List directories sdcc -mpic16 --use-non-free --print-search-dirs # Create a void C file echo //void > void.c # List predefined macros sdcc -mpic16 --use-non-free -E -dM void.c
… includedir: C:\Program Files\SDCC\bin\..\include\pic16 C:\Program Files\SDCC\bin\..\include C:\Program Files\SDCC\bin\..\non-free\include\pic16 C:\Program Files\SDCC\bin\..\non-free\include …
唯一的问题是这些路径是绝对路径。出于可移植性的原因,让我们将它们相对于编译器位置,并将它们作为include-dirs数组添加到编译器定义中。 接下来是预定义的宏。它们打印在输出的最底部。它们可以通过定义文本添加到 YAML 文件中。
match-args: -mpic16最后但同样重要的是,我们需要通过使用and语句使我们的编译器匹配更具体一些 match-language: C,然后添加 SDCC 语言扩展词作为空定义。完成后,最终的 YAML 文件将如下所示:
compilers: - description: SDCC for PIC-16 match-compiler-exe: "(.*/)?sdcc(.exe)?" match-args: -mpic16 match-language: C include-dirs: - ${compiler-exe-dir}/../include/pic16 - ${compiler-exe-dir}/../include - ${compiler-exe-dir}/../non-free/include/pic16 - ${compiler-exe-dir}/../non-free/include defines-text: " #define __SDCC_USE_NON_FREE 1 #define __SDCC_PIC18F452 1 #define __18f452 1 #define __STACK_MODEL_SMALL 1 #define __SDCC_pic16 1 #define __SDCC_ALL_CALLEE_SAVES 1 #define __STDC_VERSION__ 201112L #define __STDC_HOSTED__ 0 #define __SDCCCALL 0 #define __STDC_UTF_16__ 1 #define __SDCC_VERSION_MINOR 2 #define __STDC_ISO_10646__ 201409L #define __SDCC_VERSION_PATCH 0 #define __SDCC_VERSION_MAJOR 4 #define __STDC_NO_VLA__ 1 #define __SDCC 4_2_0 #define __STDC_UTF_32__ 1 #define __STDC_NO_THREADS__ 1 #define __SDCC_CHAR_UNSIGNED 1 #define __STDC_NO_ATOMICS__ 1 #define __STDC__ 1 #define __SDCC_REVISION 13081 #define __STDC_NO_COMPLEX__ 1 #define __interrupt #define __code #define __at "
现在我们可以重新加载项目(Tools | Makefile | Reload Makefile Project)并再次检查main.c文件。
错误消失了,可以导航到stdio.h。Show Compiler Info窗口显示正确的信息——包括预定义的宏、语言特性和标题搜索路径。
这个最终的 YAML 文件可以在GitHub上找到。
以上就是关于在 CLion 中使用任意编译器的快速指南,更多关于CLion使用教程的内容可进入官网查看。
CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。
CLion技术交流QQ群:786598704 欢迎进群一起讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢