没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:董玉霞|2022-09-09 11:43:27.117|阅读 777 次
概述: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@ke049m.cn




在使用Parasoft C/C++test执行BugDetective数据流分析时,可能会遇到用户自定义的资源API,那在这种情况下,若要判断是否存在资源问题,如资源泄露等,则需要手动配置测试配置。
大型SaaS系统的自动化测试常常受制于界面变化快、结构复杂、加载机制多变等因素。从元素识别到脚本管理,SmartBear TestComplete帮助Salesforce建了可靠的自动化测试体系。
BarTender 标签管理系统,正是帮助企业轻松实现 GS1 标准化标签设计、编码生成与信息联动的强大工具。
Parasoft C/C++test 是一款功能强大的 C/C++ 软件测试工具,集成了静态代码分析、单元测试、集成测试和覆盖率分析等功能,单元测试作为其关键功能之一,为了适配多样化的目标部署环境,C/C++test 设计了灵活的测试结果收集机制。通过Socket通讯方式来收集单元测试结果,从而扩展其测试覆盖范围与应用场景。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营