前言:自从微软收购了github之后Vs Code似乎越来越强...

而现在蜂拥而起的国内MCU的芯片商们,往往没有MD等的定制化的IDE

这个例子,我一步一步,从头开始,尝试用VS code 代替MD5 进行一个新的嵌入式系统【Melexis】的编译环境构建。


1 配置编译器:

1.1 下载

编译器用MinGW,可以自己去网站下源码,也可以用已经编译好的,这里面,下面这个链接是已经编译好的可以下载。

链接: https://pan.baidu.com/s/1EhmVd97xFRtfy3V3sJzQlg

提取码: qghe

1.2 安装

下载后,把下载好的mingw64的路径加到windows系统路径:

如图:

并在【bin】,用【shirt + 鼠标右键】打开windows PowerShell确认一下。

出现版本信息,配置成功


2 配置VScode

如图,根据你打开的问题,VSCODE会自动推荐插件


出错:

由于我的源码是嵌入式的系统【肯定不是桌面系统,也不是ARM,有专用的编译器】

现在,如果我们就那一个简单的C源码去直接启动调试,会报错:

首先的问题,这里报错的原因是头文件不对。

Vs code会自动更新配置状况,并尝试重新编译,

同时在输出窗口,提示我们现在的intellisense模式选型的windows-msvc-x64的编译器不对,

由于,现在使用的嵌入式系统的编译器和gcc嵌入式一致,因此,我们改一下,

这样之前的非兼容性报错没有了,当然,问题列表里面,找不到文件的事情还是存在的。

这个配置的结果,最终会给到【launch.json】这个配置文件。该文件主要是编译环境和调试环境配置。

小结:本例展示了对一个新的嵌入式系统,我们将如何更改他的编译环境。

However, for most debugging scenarios, creating a launch configuration file is beneficial because it allows you to configure and save debugging setup details. VS Code keeps debugging configuration information in a launch.json file located in a .vscode folder in your workspace (project root folder) or in your user settings or workspace settings.


但是,大多数的嵌入式系统,除了用IDE来进行编译外,很多开源的是用Make的方式来进行,对这种模式,Vscode提供了另外一个机制TASK:

命令行的一些开源工具,如何整合到VScode?

These tools are mostly run from the command line and automate jobs inside and outside the inner software development loop (edit, compile, test, and debug). Given their importance in the development life cycle, it is helpful to be able to run tools and analyze their results from within VS Code. Tasks in VS Code can be configured to run scripts and start processes so that many of these existing tools can be used from within VS Code without having to enter a command line or write new code. Workspace or folder specific tasks are configured from the tasks.json file in the .vscode folder for a workspace.

tasks.json,需要如上绿色所示,在[.vscode]文件夹构建一个tasks.json的配置文件:

官网的举例,这里tasks.json的名字是可以任意修改的。


现在我们来用原来的源码做一个makefile的栗子:

通过刚才的设定,我们有如下这些源码结构:

这是一个标准的gcc的makefile编译结构,包括,一个源文件main.c,一个Makefile,传统的编译,就是在命令行里面,敲入make命令,就可以生成你要的执行文件。现在我们看看能不能把他配置到Vscode里面。

刚才我们已经说了,官网是直接新建一个文件夹+json的文件,

这里,我们用[shift]+[ctrl]+[p]打开顶部的命令行对话框,输入 task,

选择,配置默认任务【生成的任务】

自动生成task.json

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "H:\\工作\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}]
}

这里面有一个依据编译器的默认执行任务:【H:\\工作\\mingw64\\bin\\gcc.exe】

用[shift]+[ctrl]+[p]再次打开顶部

输入: task,然后,选择 【Run Task】

然后选择要执行的任务,我们这里是编译,Cppbuild,

这时候,会执行编译:

在【终端】窗口:

可以,看到在

(30条消息) VS code 调试配置01 Debugging_山云的专栏-CSDN博客
中设定的编译参数,这里都被执行了。


OK,现在正式搞事情,

我们看我们的Makefile里面定义:

# Main rules
.PHONY: all
all: start $(TARGET).elf $(TARGET).hex $(TARGET).lss end$(TARGET).elf : $(OBJS) $(LIBDIR)/lib$(PROFILE).a $(LD_SCRIPT)$(CC) $(OBJS) -o $@ $(LDFLAGS).PHONY: clean
clean:-$(RM) $(OBJDIR) *.MDS *.cod-$(RM) $(TARGET).map $(TARGET).lss $(TARGET).elf-$(RM) $(TARGET).hex $(TARGET)_APP.hex

这个Makefile,里面定义了两个功能执行参数,all,clean,

我们然后,我们把这个和VS的task联系起来,

先重新编辑一下tasks.json,

注意:makefile的参数直接写,不需要写到args的列表里面,编辑后,需要重新启动Vscode.

{"version": "2.0.0","tasks": [{"label": "buildTarget","command": "make all",//"args": ["all"],"type": "shell"},{"label": "CleanTarget","command": "make clean",//"args": ["clean"],"type": "shell"}]}

重新启动后,之前默认的命令参数变成我们的make命令。

然后,我们选择【终端】

【运行任务】里面有我们刚才定义的两个make命令,buildtarget和Cleantarget.

点击一下,他有一个可能的风险提示,

我们不管继续执行,

可以看到,在终端输出了make 的结果,里面的打印信息是Makefile文件里面的东西。

这样,我们就将Makefile,绑定在Vscode的环境里面。


可能出现的问题:

调整task.json后,最好是重新关闭并启动一下VScode,以免之前的task.json的定义会影响。


小结:用Vscode执行makefile,感觉有点费劲,本来命令行的执行就好,写了很多配置,还是命令行的执行和结果,我想唯一的好处就是给对makefile不熟悉,系统不熟悉的人做的。也许方便未来的客户支持和调试吧。


参考:

(18条消息) VsCode安装和配置c/c++环境(超完整,小白专用)_黄化的多多-CSDN博客

Debugging in Visual Studio Code

​​​​​​Tasks in Visual Studio Code

(29条消息) VSCode 结合Makefile设置调试方法_gbmaotai的博客-CSDN博客

(30条消息) VS code 调试配置01 Debugging_山云的专栏-CSDN博客

Vs code 02 配置非标准的C、C++的编译环境相关推荐

  1. Geany配置C语言、Java、Python编译环境

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Geany配置C语言.Java.Python编译环境 前言 1.Geany配置C语言编译环境 1.下载 2.安装 3.配置环境变量 4 ...

  2. MinGW安装与环境变量配置和Sublime Text 3搭建C++编译环境

    一.MinGW在Windows中的安装与配置: MinGW MinGW(Minimalist GNU For Windows)是个精简的Windows平台C/C++.ADA及Fortran编译器,相比 ...

  3. Linux本地yum源配置以及使用yum源安装gcc编译环境

    本文档是图文安装本地yum源的教程,以安装gcc编译环境为例. 适用范围:所有的cetos,红帽,fedroa版本 适用人群:有一点linux基础的小白 范例系统版本:CentOS Linux rel ...

  4. Win7平台下配置Sublime Text2 的C++编译环境

    Win7平台下配置Sublime Text2 的C++编译环境 Sublime Text 是一个跨平台的编辑器,之前在 Mac 上成功配置了 C++ 在 Sublime Text 的编译环境,接下来介 ...

  5. Linux BSP非标准HDMI分辨率

    Linux BSP非标准HDMI分辨率 Intrinsyc公司发布了它的一个新的Linux BSP软件的发布 打开-Q™820 开发套件基于Linux内核版本.支持的软件功能包括HDMI输出,可以支持 ...

  6. 阿里配管专家解读:如何最优成本搭建非标准的iOS构建集群

    作者简介:董必胜(叔大),阿里巴巴配置管理专家,负责集团.蚂蚁的移动端构建,负责研发协同平台RDC无线. 背景:在移动物联网大潮中iOS构建的重要性日益突出,如何能提供稳定的iOS构建服务?中大型的企 ...

  7. 非标准语法;请使用 _一文读懂使用MCU SPI访问具有非标准SPI接口ADC的方法

    好文章当然要分享啦~如果您喜欢这篇文章,请联系后台添加白名单,欢迎转载哟~ 问题 能否用MCU访问非标准SPI接口? 答案 可以,但可能需要做一些额外的努力. 当前许多精密模数转换器(ADC)具有串行 ...

  8. 在ISA Server 2004上发布使用非标准的21端口进行连接的FTP服务器

    在ISA Server 2004上发布使用非标准的21端口进行连接的FTP服务器 (只有PASV模式发布) 首先非常感谢Tom的指导,他在ISA Server 2004上给予了我许多帮助.:) Tom ...

  9. css标准流/非标准流 盒子模型

    流:网页设计中就是指元素(标签)排列的方式 标准流:元素在网页中就像流水,排在前面的先出现,排在后面的后出现,默认布局方式 <!DOCTYPE html> <html>< ...

最新文章

  1. 干货|建议初创团队起初也要构建分布式应用
  2. python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行。
  3. linux无锁化编程--__sync_fetch_and_add系列原子操作函数
  4. 网易游戏2016实习生招聘笔试题目--井字棋
  5. PyTorch模型量化工具学习
  6. 为什么说“概率”带来一场现代革命?
  7. Allegro跨分割检查
  8. Hyperledger Fabric 三种node节点 (1) 基本概念
  9. nginx重新加载php,如何使用nginx启动、停止和重新加载
  10. Python Django 生成随机字符串UUID的使用示例
  11. java 使按钮被选中_java – 让我的单选按钮在Android中被选中
  12. 学习Java编程equals()和hashCode()方法
  13. OREO免费授权系统源码
  14. linux16.04下安装Clion2019.2记录以及C++代码运行
  15. python fortran混合编程_python fortran c 混合编程
  16. 原创 | 职场风云 (二)试验田
  17. 汉诺塔递归算法python详细解析图_python实现汉诺塔递归算法经典案例
  18. [坑] FileZilla下载按钮为灰色
  19. OPA策略引擎用法实战
  20. 20220422web前端面试记录

热门文章

  1. JEB 无源码调试 以dvm smali字节码方式,Demo尝试
  2. JSP+Servlet+C3P0+Mysql实现的azhuo商城
  3. #苹果maccmsv10# redis memcached 缓存的若干问题解决
  4. nuxt asyncData extendRoutes nuxtServerInit
  5. 【Python】用tkinter做一个采色器
  6. C#LeetCode刷题之#28-实现strStr()(Implement strStr())
  7. 如何破解几乎所有的求职面试
  8. sass webpack_如何在Visual Studio和Webpack中编译Sass文件
  9. 任务完成从不加班_我如何从不知道如何编码转变为在9个月内交付9个项目-都在我15岁之前就完成了……...
  10. go语言web开发 排坑指南