【vscode】vscode+cmake+llvm+ninja开发环境的搭建(draft)

文章目录

  • 前言
  • 1 软件、工具和插件安装
    • 1.1 vscode安装
    • 1.2 cmake安装
    • 1.3 安装LLVM
    • 1.4 安装Ninja
    • 1.5 vscode插件安装
  • 2 工具链和CMakeLists
    • 2.1 工具链(toolchain.cmake)
    • 2.2 CMakeLists.txt
    • 2.3 基本语法注释


前言

本文是一个使用vscode的小白扫盲贴。
所谓工欲善其事必先利其器,作为码农的生产工具,vscode的开发配置是生产的第一步。


1 软件、工具和插件安装

本章内容主要参考下面这篇文章。
链接:vscode + cmake + ninja + ARMCC 配置stm32开发环境(构建篇)

以下做一些简单补充。

1.1 vscode安装

没啥好说的,官网下载,无脑安装。

1.2 cmake安装

参考上面链接文章,讲的很详细。

1.3 安装LLVM

链接: LLVM Release
链接: github 安装包
GitHub的跳转总是会抽,可以尝试用git clone下载。
本文提供下载好的文件,有需要自取。

LLVM 是一套编译器基础设施项目,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、执行时期以及“闲置时期”的优化。LLVM广泛应用于高性能计算、嵌入式系统、移动设备等多种领域。

1.4 安装Ninja

Ninja的安装和编译需要特殊说明一下:
Ninja的使用需要安装visual studio(VS的IDE),并安装C++开发的一些工具,要不然找不到vcvarsall.bat这个文件,无法完成Ninja的编译,也无法完成后续的cmake configuration。
Ninja的安装可以直接下载发布版(ninja-win.zip,无需编译),并直接解压后将Ninja加入环境变量。
Ninja 是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。

1.5 vscode插件安装

Clangd
CMake
CMake Tools
CMake Language Support

2 工具链和CMakeLists

2.1 工具链(toolchain.cmake)

在settings.json中添加如下参数,编译时引用TOOLCHAIN,省的每次编译都要输路径。

"cmake.configureArgs": ["-DCMAKE_TOOLCHAIN_FILE=${sourceDir}/armcc_toolchain.cmake"]

armcc_toolchain.cmake
简单写了一个demo。

注意:cmake对armcc的识别有版本兼容要求,我在测试armcc v5.06版本时,cmake始终无法识别编译器,因此CMAKE_C_COMPILER 一直是clang,output显示“The C compiler identification is unknown”。
下面demo将路径切换到armclang,可以识别。

option(USE_ARMCC "USE_ARMCC" OFF)
option(USE_ARMCLANG "USE_ARMCLANG" ON)if (USE_ARMCLANG)message(NOTICE "USE_ARMCLANG")set(TOOLCHAIN_PATH "D:/Program Files/Keil_v5/ARM/ARM_Compiler_5.06u7/bin")set(TOOLCHAIN_PATH "D:/Program Files/Keil_v5/ARM/ARMCLANG/bin")set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/armclang.exe")set(CMAKE_C_COMPILER_ID "ARMCC")message(NOTICE ${CMAKE_C_COMPILER})set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/armclang.exe")set(CMAKE_CXX_COMPILER_ID "ARMCC")set(CMAKE_ASM_COMPILER "${TOOLCHAIN_PATH}/armasm.exe")set(CMAKE_ASM_COMPILER_ID "ARMASM")set(CMAKE_C_LINK_EXECUTABLE "${TOOLCHAIN_PATH}/armlink.exe")set(CMAKE_CXX_LINK_EXECUTABLE "${TOOLCHAIN_PATH}/armlink.exe")set(CMAKE_ASM_LINK_EXECUTABLE "${TOOLCHAIN_PATH}/armlink.exe")set(CMAKE_C_ARCHIVE_CREATE "${TOOLCHAIN_PATH}/armar.exe")set(FROMELF "${TOOLCHAIN_PATH}/armar.exe")#    set(CMAKE_TRY_COMPILE_TARGET_TYPE STAIC_LIBRARY)endif()

注意如下的output信息。toolchain生效和armclang识别。
在这里插入图片描述

2.2 CMakeLists.txt

以下是个DEMO,其中还有很多不足,根据具体项目需要调整。
其中,cmake_policy(SET CMP0123 NEW)不是必须的,根据选用的编译器设置。

cmake_minimum_required(VERSION 3.20) ##支持的cmake最低版本
cmake_policy(SET CMP0123 NEW)set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION "0.0.1")
set(CMAKE_SYSTEM_PROCESSOR Cotex-M0+)
set(CORE_TYPE ac780x)set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)# project setting
project("FOC" VERSION 0.0.1 LANGUAGES C ASM)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)message(NOTICE "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")if (USE_ARMCLANG)# 设置C编译器标志# -mcpu=cortex-m0+: 目标 CPU 架构为 Cortex-M0+。# -mthumb: 生成 Thumb 代码。# -mfpu=fpv4-sp-d16: 浮点单元为 FPv4。# -O2: 较强的优化。# -g: 包含调试信息。# -Wall -Wextra: 开启所有警告和额外警告。# --apcs=interwork 选项意味着编译器将生成支持 interworking 的代码,即能够在 Thumb 和 ARM 状态之间平滑切换的代码。set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=${CMAKE_SYSTEM_PROCESSOR} -mthumb -O2 --pd '__EVAL SETA 1' -g --apcs=interwork --pd '__MICROLIB SETA 1' -Wall -Wextra")# 设置ASM编译器标志set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mcpu=${CMAKE_SYSTEM_PROCESSOR} -mthumb -O2 --apcs=interwork")endif()set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
set(ELF_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.elf)#file(GLOB_RECURSE C_SOURCES CONFIGURE_DEPENDS *.c *.h)
set(C_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Code/Application/main.c)
message(NOTICE "C_SRC_DIR: ${C_SOURCES}")include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Code/Application${CMAKE_CURRENT_SOURCE_DIR}/Code/Configuration${CMAKE_CURRENT_SOURCE_DIR}/Code/Drivers${CMAKE_CURRENT_SOURCE_DIR}/Code/Drivers/ATC_Driver/Inc${CMAKE_CURRENT_SOURCE_DIR}/Code/Drivers/Device/Include${CMAKE_CURRENT_SOURCE_DIR}/Code/Drivers/Device/Include/CMSIS${CMAKE_CURRENT_SOURCE_DIR}/Code/Foc_Lib/include${CMAKE_CURRENT_SOURCE_DIR}/Code/Math${CMAKE_CURRENT_SOURCE_DIR}/Code/Motor)add_executable(${PROJECT_NAME} ${C_SOURCES} )
link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/Code/Foc_Lib/src/Foc_Lib.lib)add_custom_command(TARGET ${PROJECT_NAME} POST_BUILDCOMMENT "Building ${HEX_FILE}"COMMAND ${ARMCC_FROMELF} --i32combined --output="${HEX_FILE}" "${ELF_FILE}")

2.3 基本语法注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个php快速项目搭建框架源码,带一键CURD等功能

介绍: 框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。 百度网盘下载 图片:

从Python转向MicroPython使用详解

概要 随着物联网(IoT)设备的普及和嵌入式系统的广泛应用,MicroPython逐渐成为Python开发者们探索嵌入式编程的重要工具。MicroPython是一种精简版的Python,专为资源受限的设备而设计,能够在微控制器和其他嵌入式设备上运行。对于习惯使用Python的开发者而言,转向MicroPy…

海大集团的可观测平台建设实践

海大集团介绍 海大集团是以科技为主导的中国农业龙头企业,1998年成立于广东广州,目前业务涵盖饲料、种苗、动保疫苗、智慧养殖、食品加工等现代农牧全产业链,在全球拥有分子公司逾600家、员工达4万人,位列2023中国企业500强第238…

Python爬虫(一文通)

Python爬虫(基本篇) 一:静态页面爬取 Requests库的使用 1)基本概念安装基本代码格式 应用领域:适合处理**静态页面数据和简单的 HTTP 请求响应**。 Requests库的讲解 含义:requests 库是 Python 中一个…

【HTML】模拟二级菜单【附源代码】

模拟二级菜单 HTML部分&#xff1a; <!DOCTYPE html>: 声明文档类型为HTML5。<html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如字符集、标题和样式。 <meta charset"utf-8">: 设置文档的字符编码为UTF-8。<title>:…

公网信息泄露监测(网盘、暗网、搜索引擎、文档平台)思路分享

一、背景 众测项目中白帽可能会提交一些信息泄露漏洞&#xff0c;同时甲方可会收到一些白帽提交的公网信息泄露文件漏洞&#xff0c;例如百度网盘被员工分享某些文件或者某些包含敏感信息的文件可以通过如谷歌、百度等搜索引擎通过特定语法搜索到。为了可以及时发现泄露的文件…

【计算机组成原理】六、总线:1.总线概论(分类、性能指标、总线标准)

六、总线 文章目录 六、总线1.总线概论2.分类2.1按数据传输格式2.2按总线功能(连接的部件)2.3按时序控制方式2.2-2系统总线的结构 3.性能指标6.总线标准6.1系统总线6.2局部总线6.3设备总线、通信总线6.4为何串行总线取代并行总线&#xff1f; 1.总线概论 总线被刻蚀在主板上 总…

【3.6】贪心算法-解救生艇问题

一、题目 第 i 个人的体重为 people[i]&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit 。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 二、解题思路 题目要求每艘船最多能载两人&…

【58同城-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

【零知识证明】MiMC哈希函数电路

1 哈希电路 哈希函数电路实现&#xff1a; pragma circom 2.0.0;// y (x k c) ^ 5 // 输入信号x, k &#xff0c;常量c // base x k c // base2 base * base // base4 base2 * base2 // base5 base *base4 // 输出 ytemplate MIMC5(){signal input x;signal input k…

【SpringCloud Alibaba】(九)学习 Gateway 服务网关

目录 1、网关概述1.1、没有网关的弊端1.2、引入 API 网关 2、主流的 API 网关2.1、NginxLua2.2、Kong 网关2.3、Zuul 网关2.4、Apache Shenyu 网关2.5、SpringCloud Gateway 网关 3、SpringCloud Gateway 网关3.1、Gateway 概述3.2、Gateway 核心架构 4、项目整合 SpringCloud …

信息安全--网络安全体系与安全模型(二)

其他安全模型 ■纵深防御模型&#xff1a;①安全保护②安全监测③实时响应④恢复 ■分层防护模型&#xff1a;参考OSI模型&#xff0c;对保护对象进行层次化保护。 ■等级保护模型&#xff1a;将信息系统划分成不同安全保护等级&#xff0c;采取相 应的保护措施。 ■网络生…

UE开发中的设计模式(四) —— 组合模式

面试中被面试官问到组合模式和继承有什么区别&#xff0c;给我问懵了&#xff0c;今天又仔细看了下&#xff0c;这不就是UE里的组件吗 >_< 文章目录 问题提出概述问题解决总结组合模式的优缺点继承的优缺点 问题提出 考虑这样一个场景&#xff0c;我们有一个敌人的基类&…

武器弹药制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

武器弹药制造领域作为国防工业的重要组成部分&#xff0c;其数字化转型更是关乎国家安全与军事实力提升的关键。随着5G、物联网、大数据、云计算及人工智能等先进技术的融合应用&#xff0c;武器弹药制造5G智能工厂物联数字孪生平台应运而生&#xff0c;正逐步成为推进制造业数…

程序设计—智慧城市应急物资配送系统开发—大数据模块 项目源码36262

摘 要 智慧城市应急物资配送系统开发中的大数据模块&#xff0c;作为核心的数据处理与分析组件&#xff0c;实现了数据可视化、用户行为分析、精准广告推送、数据报表生成以及商品与需求信息的全面管理。 该模块通过数据地图展示大屏&#xff0c;实时呈现应急物资配送的层级联…

【STM32】电容触摸按键

电容按键就是酷&#xff0c;但据我使用过电容按键版的洗澡计费机子后&#xff0c;一生黑&#xff08;湿手优化没做好的电容按键简直稀碎&#xff09;。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 触摸按…

Python 如何操作 Excel 文件(openpyxl, xlrd)

Python是处理Excel文件的一种非常强大且灵活的工具&#xff0c;尤其是通过使用openpyxl和xlrd等库。openpyxl专注于Excel 2007及更高版本的.xlsx文件的创建、读取、修改和写入&#xff0c;而xlrd则主要用于读取早期版本的Excel文件&#xff08;.xls&#xff09;&#xff0c;但自…

【教你一键解决】draw.io中输入英文显示成中文且输入位置移到首位

问题描述&#xff1a;当英文输入一个“a”时&#xff0c;会自动出现中文“一个”&#xff0c;再输入“a”才会出现“a”&#xff0c;删除时无法把中文删除&#xff0c;如下图所示。 解决方法&#xff1a;关闭浏览器的自动翻译功能即可&#xff0c;如下图所示。

HTTPS协议中的加密机制分析、证书认证

目录 一、为什么要对数据进行加密&#xff1f; 二、什么是加密和解密&#xff1f; 三、加密方式 对称加密 非对称加密 四、数据摘要(数据指纹) 五、数字签名 六、探究保证双方通信安全的的加密方案 1、只使用对称加密 2、只使用非对称加密 3、双方都是用非对称加密 …

怎么理解数据资源、数据资产和数据要素?

身处信息化时代&#xff0c;我们每时每刻都在产生和接触各类数据&#xff0c;如网购记录、短视频等。在我国数据安全法中将数据定义为任何以电子或其他方式对信息的记录。即数据不仅指数字表格等结构化内容&#xff0c;也可以是文字、图形、图像等半结构化、非结构化信息。 1、…