【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.mzph.cn/web/51600.shtml

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

相关文章

科讯档案管理系统存在SQL注入漏洞(0day)

漏洞描述 安徽科迅教育装备20年来来始终坚持智慧校园集成方案产品的开发和部署应用,我们有完善的智慧校园和数字校园建设方案,根据不同的学校不同的实际情况量身定做系统集成方案。产品主要是为了实现校园的智慧网络、智慧OA、智慧教学、智慧学习、数字医…

.NET Razor类库-热加载 就是运行时编译

1.新建3个项目 1.1 一个.NET Standard2.1项目 IX.Sdk.SvnCICD4NuGet 1.2 一个.NET Razor类库项目 IX.Sdk.SvnCICD4NuGet.RazorWeb 1.3 一个.NET6 Web项目 IX.Sdk.SvnCICD4NuGet.Web 这3个项目的引用关系 Web引用 Razor类库 和 .NET Standard2.1 Razor类库引用.NET Standard2.1…

数据同步大冒险:PostgreSQL到MySQL的奇妙之旅

引言:一场跨数据库的浪漫邂逅 💑 在数据的世界里,不同数据库系统就像是来自不同星球的恋人,它们各自拥有独特的魅力,但偶尔也会渴望一场跨越界限的亲密接触。今天,我们就来见证一场PostgreSQL与MySQL之间的…

基于RK3588+MCU智能清洁车应用解决方案

智能清洁车应用解决方案 在智慧城市建设发展的过程中,智慧环卫是打造智慧城市的重要组成部分,智能清洁车作为实现环卫智能化、提升作业效率和服务质量的关键工具,发挥着不可或缺的作用。 智能清洁车集成了激光雷达、双目视觉、多重传感器以及…

无线通信频率分配

首先看看无线电信号的频谱如何划分: 一、5G NR 3GPP已指定5G NR 支持的频段列表,5G NR频谱范围可达100GHz,指定了两大频率范围: ① Frequency range 1 (FR1):就是我们通常讲的6GHz以下频段 频率…

uniapp uni-popup底部弹框留白 底部颜色修改 滚动穿刺

做底部弹框的时候,可能出现以下场景需要处理。 一、出现底部留白不是白色,需要修改颜色的时候: 1、如果弹框不需要圆角效果,则在uni-popup加上背景色就行,弹框是个直角样式: 2、如果需要圆角效果&#xff0…

CSS3页面布局-三栏-中栏流动布局

三栏-中栏流动布局 用负外边距实现 实现三栏布局且中栏内容区不固定的核心问题就是处理右栏的定位&#xff0c; 并在中栏内容区大小改变时控制右栏与布局的关系。 控制两个外包装容器的外边距&#xff0c;一个包围三栏&#xff0c;一个包围左栏和中栏。 <!DOCTYPE html&…

【vue、Electron】搭建一个Electron vue项目过程、将前端页面打包成exe 桌面应用

文章目录 前言使用 electron-vue 创建项目1. 安装 vue-cli&#xff08;如果未安装&#xff09;2. 使用 electron-vue 模板创建项目3. 安装和配置 electron-builder4. 运行Electron项目5. 打包应用 可能遇到的问题解决Electron vue首次启动巨慢无法加载执行npm run electron:bui…

grid布局实现移动端H5响应式排列正方形格子布局

grid布局实现移动端H5响应式排列正方形区域 grid布局&#xff1a;CSS Grid 网格布局教程在 CSS 中&#xff0c;padding-top 的百分比值是相对于元素自身的宽度&#xff0c;而不是高度。这是 CSS 规范中的一个特性&#xff0c;所有的 padding 和 margin 的百分比值都是相对于元…

客服系统简易版

整体架构解读 客服端和商城端都通过websocket连接到客服系统, 并定期维持心跳当客户接入客服系统时, 先根据策略选择在线客服, 然后再发送消息给客服 websocket实现 用netty实现websocket协议, 增加心跳处理的handler, 详见chat-server模块 客服路由规则 暂时仅支持轮询的…

上新!Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型&#xff1b; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2)&#xff0c;多输入单输出&#xff0c;含不同置信区间图、概率…

出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错

目录&#xff1a; bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错解决方法 bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty 报错 在一个springboot demo启动的时候出现以下错误 &#xff0c;…

中国城市经济韧性数据集(2007-2022年)

数据来源&#xff1a;数据来自历年《中国城市统计NJ》、各省市《统计NJ》及《中国区域经济统计NJ》 时间范围&#xff1a;2007-2022年 数据范围&#xff1a;中国地级市样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff08;原始数据计算代码最终数据&…

大数据基础:离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 ​​​​​​​二、实时数仓建设思路 离线与实时数仓区别和建设思路 ​​​​​​​一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传…

zdppy+vue3+onlyoffice文档管理系统实战 20240829上课笔记 Python验证码框架完成

遗留的问题 还没有测试校验的功能 测试校验验证码的功能 生成验证码 from .tobase64 import get_base64 from .validate import is_captchadef captcha(api, cache, num4, expire60):""":param cache: 缓存对象:param num: 验证码的个数:param expire: 验证…

C++系列-STL容器之vector

STL概念 vector基本概念vector与数组的区别vector容器的特点动态大小连续存储自动扩容尾部操作高效 vector动态扩展的含义vector常用的接口示意 vector的构造函数vector赋值操作重载赋值assign赋值 vector的容量和大小vector的插入和删除vector数据存取vector互换容器vector互换…

Apache RocketMQ 批处理模型演进之路

作者&#xff1a;谷乂 RocketMQ 的目标&#xff0c;是致力于打造一个消息、事件、流一体的超融合处理平台。这意味着它需要满足各个场景下各式各样的要求&#xff0c;而批量处理则是流计算领域对于极致吞吐量要求的经典解法&#xff0c;这当然也意味着 RocketMQ 也有一套属于自…

从开题到答辩:ChatGPT超全提示词分享!(上)【建议收藏】

在浩瀚的知识领域中&#xff0c;提问的艺术是探索真理的钥匙。在这个信息爆炸的时代&#xff0c;深入探索知识的海洋&#xff0c;不仅需要热情和毅力&#xff0c;更需要正确的方法和工具。学术研究是一个复杂而严谨的过程&#xff0c;涉及从选题、文献综述到研究设计、数据收集…

最新高仿拼夕夕源码/拼单系统源码/拼单商城/类目功能齐全

源码简介&#xff1a; 高仿拼夕夕源码&#xff0c;拼单商城系统源码、拼团商城源码&#xff0c;改的版本。拼夕夕拼团商城系统源码源码 多商户多区域拼团系统源码。 自己改的版本&#xff0c;类似于拼单的商城&#xff0c;功能齐全&#xff0c;看着还挺不错&#xff0c;绝对值…

macos 10.15 catalina xcode 下载和安装

在macos 10.15 catalina系统中, 由于系统已经不再支持,所以我们无法通过应用商店来安装xcode, 需要手动下载指定版本的 xcode 版本才能安装, catalina 支持的最新xcode版本为 Xcode v12.4 (12D4e) , 其他的新版本是无法安装在Catalina系统中的. Xcode_12.4.xip下载地址 注意,下…