提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2023-05-09 10:39:09.603|阅读 50 次
概述:本文将为大家讲解关于在 CLion 中使用任意编译器的快速指南,欢迎下载最新版IDE体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
CLion是一款专为开发C及C++所设计的跨平台IDE,它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C++,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CMake编译系统,从而提高开发人员的工作效率。
作为一款IDE,CLion提供了许多功能来帮助开发者,它可以显示文档弹出窗口、实时检测错误、建议修复等。内部代码分析器始终在后台运行,在您输入时分析 C 和 C++ 代码。 对于自动分析器来说,C 和 C++ 是具有挑战性的语言,因为需要特定于编译器的数据才能正确解析代码,引擎需要知道标题搜索路径、预定义的宏定义和其他一些详细信息。
对于一组预定义的已知编译器,CLion会使用特殊选项运行项目的编译器,并在解析项目时收集所需信息。 当然这只适用于有限数量的编译器,如GCC、Clang、MSVC、IAR及其衍生工具,如果某个项目使用特定的自定义编译器、很少使用的编译器或我们无权访问的专有编译器来正确集成,则CLion无法通过其标准过程进行使用。 在这种情况下,您可以选择使用自定义编译器功能。
要在CLion中使用自定义编译器,您需要一个包含必要编译器数据的YAML文件。 此类文件应包含一个或多个小节,每个小节描述一个特定的编译器或编译器变体,每个小节应有一个描述、一个或多个匹配记录,以及多个信息记录。
当CLion解析项目并遇到针对项目文件的编译器时,CLion会逐节扫描,并检查编译器是否与记录匹配。 匹配会使用一个或多个匹配记录来完成,可用的匹配记录包括:
在所有匹配项成功解析之后,就会选取小节信息记录,并跳过YAML文件的其余部分。 编译器数据获取自信息记录,然后直接传递给 CLion 的代码分析器;也就是说,在编译器试运行期间不收集数据。
如果这些小节都没有为IDE提供将记录与特定编译器积极匹配的信息,它会尝试以通常的方式(即通过猜测编译器的类型并运行编译器)来收集编译器数据。
要开始编写自定义编译器YAML文件,需要确定有关您的编译器的以下详细信息:
我们通过为Small Device C Compiler (SDCC) 编写一个自定义编译器YAML文件来实践此过程, SDCC支持多种8位CPU架构,如STM8、Z80等。 该编译器是开源的,是多个MCU系列中唯一的免费编译器。 在此示例中,我们将为其Microchip PIC-16 变体(端口)编写一个 YAML 文件。
以下是我们需要了解的有关此编译器的详细信息:
我们将从创建一个测试项目开始,此最小项目包含一个C文件、YAML文件本身和一个构建系统文件,我们将使用Makefile。 如果要使用 C++,那么还应该添加另一个使用 C++ 编写的源文件。
首先,创建一个项目文件夹,并在里面创建一个空白 Makefile。
在CLion中打开该文件夹,然后在弹出的 Load Project(加载项目)对话框中点击 Cancel(取消)。
在 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可以通过动态文件结构验证和输入提示为您提供帮助。 架构名称显示在 IDE 状态栏中,可以通过点击名称进行选择。
存根为:
compilers: - description: SDCC for PIC-16 match-compiler-exe: "(.*/)?sdcc(.exe)?"
目前我们只通过名称进行匹配,它是一个匹配 Linux 和 Windows 编译器二进制文件名称的正则表达式,无论包含文件夹是什么。
下一步是在 CLion 中使用我们的自定义编译器配置,打开 Settings/Preferences | Build, Execution, Deployment | Toolchains | Custom Compiler(设置/偏好设置 | 构建、执行、部署 | 工具链 | 自定义编译器), 选中 Use custom compiler config(使用自定义编译器配置),并选择项目的 YAML 文件作为配置文件。
在 Tools(工具)菜单中选择 Makefile | Clean and Reload Makefile Project(Makefile | 清理并重新加载 Makefile 项目),如果一切正常,Build(构建)工具窗口将显示项目已成功加载。
如果项目未正确加载,则应仔细检查 YAML 文件中的 match-compiler-exe 语句。 记录值是一个正则表达式,它是该过程中最脆弱的部分。
现在我们来看看CLion是否真的适配了 SDCC,我们的项目是否按预期运行。
在编辑器中打开 main.c, 此时看到一些错误没有关系。 转到 Help | Diagnostics Tools(帮助 | 诊断工具),选择 Show Compiler Info(显示编译器信息)。 这将打开一个诊断页面,其中包含正在编辑的文件的编译器信息。 在这里,您可以看到编译器种类(“Custom Defined Compiler”)和检测到的编译器描述(“SDCC for PIC-16”)。 这意味着 CLion 感知到了项目结构,但是代码分析器还没有所需的编译器数据,因此在 main.c 中显示了各种错误。
我们的 main.c 文件目前似乎已损坏, 找不到 stdio.h,printf 未定义,__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
接下来,我们需要构建 gather_info 目标并查看输出。 首先,有一个标题搜索路径列表:
… includedir: C:Program FilesSDCCbin..includepic16 C:Program FilesSDCCbin..include C:Program FilesSDCCbin..non-freeincludepic16 C:Program FilesSDCCbin..non-freeinclude …
唯一的问题是这些路径是绝对路径,出于可移植性原因,我们将它们设为相对于编译器位置,并将它们作为 include-dirs 数组添加到编译器定义中。
接下来是预定义的宏,它们被打印在输出的最底部,可以通过 defines-text 将它们添加到 YAML 文件。
最后但同样重要的是,我们需要通过使用 match-args: -mpic16 和 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(工具 | Makefile | 重新加载 Makefile 项目)并再次检查 main.c 文件。
错误已经消失,并且可以导航到 stdio.h。 Show Compiler Info(显示编译器信息)窗口显示了正确的信息,包括预定义的宏、语言功能和标题搜索路径。
Jetbrains技术交流群(QQ):786598704 欢迎一起进群讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:慧都网Visual Paradigm中的Doc. Composer菜单,可让您以完全可自定义的方式输出模型和图表的每个细节。在本文中,您将学习如何创建自定义模板来输出项目中图表或模型元素的注释。
对于银行金融、政府、医疗等需要处理大量信息的组织来说,高效的数据管理至关重要。对于大型数据扫描项目,Dynamic Web TWAIN SDK 提供强大的功能,只需极少的设置即可支持大量文档处理,让我们看看 Dynamsoft 如何简化此过程中的每个步骤。
在 Microsoft Excel 中,复制行、列和单元格是日常数据处理中的常见操作。本文将介绍如何使用 Spire.XLS for Java 和 Java 在 Excel 中复制行、列和单元格数据并保留格式。
雷达图又称蜘蛛图,是一种显示二维多元数据的图形方法。图表上的每个辐条代表一个不同的变量,数据点沿着这些辐条绘制。雷达图尤其适用于比较不同实体在多个标准中的表现。本文将演示如何使用 Spire.XLS for Python 通过 Python 在 Excel 中创建雷达图。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢