你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一款Win10下好用的C语言编辑器

[复制链接]
gaosmile 发布时间:2020-6-3 21:06
01
前言

有位朋友让我推荐一款Win10下好用的C语言编辑器,我毫不犹豫的选择了VSCode。免费、小而快、插件多这三点是我选择它的理由,本文就详解VsCode下编译、配置、调试C代码。(长文和多图预警!!可以收藏需要安装和配置时参考)
02
环境准备

编译器,VSCode只是个编辑器,C语言编译器要另外下载安装,笔者使用的MinGW64,安装好后一定不要忘记配置好环境变量,可以使用gcc -v确认编译器是否配置好。
微信图片_20200603210430.png
VScode 官网下载安装。
03
编译运行

命令行编译运行
新建C文件,熟悉的HelloWorld。
微信图片_20200603210434.png
这个时候可以使用命令行运行,VSCode菜单栏Terminal--->new Termial   如下进入目录直接运行。
微信图片_20200603210438.png
一键运行
打开VSCode 安装下面俩个插件
微信图片_20200603210440.png
安装好后选中c文件点击VSCode右上放的三角或者使用Ctrl+Alt+N即可运行。运行结果如下
微信图片_20200603210443.png
多文件编译运行
上面讲述的都是单个文件的时候运行,从上面了解到其实Code Runner只是代替你手动输命令,当你需要少量的多文件运行,可以更改settings.json的gcc命令来实现。以如下目录结构为例,VSCode打开工作目录,
微信图片_20200603210446.png
Ctrl+Shift+P  搜索settings  打开JSON文件
微信图片_20200603210449.png
把settings.json 修改如下:

  1. {
  2.     "files.autoGuessEncoding": true,
  3.     "code-runner.runInTerminal": true,
  4.     "files.associations": {},
  5.     "code-runner.executorMap": {
  6.         "c":"cd $dir && gcc *.c ../../hello2/src/*.c ../../hello1/src/*.c -I ../inc/ -I ../../hello2/inc/ -I ../../hello1/inc/ -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
  7.     },
  8. }
复制代码

其实就是按照gcc 源文件1.c 源文件2.c -I incPath1 -I incPath2的命令修改即可,注意头文件的路径可以是相对路径也可以是绝对路径,如果#include的时候把头文件的路径加上,gcc 编译的时候可以不用把路径加上。当程序文件很多架构大时,需要学习makefile的编写,使用make命令。还是以上面的文件为例。
Makefile文件

  1. MainExt     =.exe
  2. SourceExt   =.c
  3. TargetExt   =.o

  4. OBJ_DIR := obj
  5. BIN_DIR := bin
  6. MAIN_SRC_DIR := main/src
  7. MAIN_INC_DIR := main/inc
  8. HELLO1_SRC_DIR := hello1/src
  9. HELLO1_INC_DIR := hello1/inc
  10. HELLO2_SRC_DIR := hello2/src
  11. HELLO2_INC_DIR := hello2/inc

  12. cc := gcc
  13. CFLAGS := -g -Wall -I./$(MAIN_INC_DIR) -I./$(HELLO1_INC_DIR) -I./$(HELLO2_INC_DIR) -DDEBUG

  14. MAIN_SRCS := $(wildcard $(MAIN_SRC_DIR)/*.c)
  15. MAIN_HDRS := $(wildcard $(MAIN_INC_DIR)/*.h)
  16. HELLO1_SRCS := $(wildcard $(HELLO1_SRC_DIR)/*.c)
  17. HELLO1_HDRS := $(wildcard $(HELLO1_INC_DIR)/*.h)
  18. HELLO2_SRCS := $(wildcard $(HELLO2_SRC_DIR)/*.c)
  19. HELLO2_HDRS := $(wildcard $(HELLO2_INC_DIR)/*.h)
  20. OBJS := $(patsubst $(MAIN_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(MAIN_SRCS))
  21. OBJS += $(patsubst $(HELLO1_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(HELLO1_SRCS))
  22. OBJS += $(patsubst $(HELLO2_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(HELLO2_SRCS))

  23. TARGET := $(BIN_DIR)/main$(MainExt)

  24. .DEFAULT_GOAL := $(TARGET)

  25. $(TARGET): $(OBJS)
  26.   $(cc) $(CFLAGS) -o $@ $^

  27. $(OBJ_DIR)/%.o: $(MAIN_SRC_DIR)/%.c
  28.   $(cc) $(CFLAGS) -c -o $@ lt;

  29. $(OBJ_DIR)/%.o: $(HELLO1_SRC_DIR)/%.c
  30.   $(cc) $(CFLAGS) -c -o $@ lt;

  31. $(OBJ_DIR)/%.o: $(HELLO2_SRC_DIR)/%.c
  32.   $(cc) $(CFLAGS) -c -o $@ lt;

  33. .PHONY: clean
  34. clean:
  35.   del .\$(BIN_DIR)\*.exe
  36.   del .\$(OBJ_DIR)\*.o
复制代码

把settings.json 修改如下:

  1. {
  2.     "files.autoGuessEncoding": true,
  3.     "code-runner.runInTerminal": true,
  4.     "files.associations": {},
  5.     "code-runner.executorMap": {
  6.         "c":"make && ./bin/main.exe",
  7.     },
  8. }
复制代码

运行结果
微信图片_20200603210452.png
注意:win10下make命令要和编译器安装路径下的make可执行文件一致,我是把安装路径D:\Program Files\mingw64\bin\minGW64-make.exe修改为make.exe,不修改要使用minGW64-make命令
04
调试

我们经常要调试代码,下面来看看调试的配置。

打开工作目录(调试的话工作路径不能含有中文) 在工作目录下新建文件.vscode并创建tasks.json 和launch.json,可以手动创建也可以Ctrl+Shift+P  弹出的对话框中搜索后根据引导创建。
微信图片_20200603210454.png
创建完成后根据自己的需求修改内容,下面给出单文件和多文件的一个示例。
单个文件调试
launch.json 配置内容如下:

  1. {
  2.     // Use IntelliSense to learn about possible attributes.
  3.     // Hover to view descriptions of existing attributes.
  4.     // For more information, visit: http://go.microsoft.com/fwlink/?linkid=830387
  5.     "version": "0.2.0",
  6.     "configurations": [
  7.         {
  8.             "preLaunchTask": "Build", //调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
  9.             "name": "(gdb) Launch", //配置文件的名字,可以随便起
  10.             "type": "cppdbg", //调试的类型,Vscode现在支持很多,我这里主要是C,所以只能是cppdbg
  11.             "request": "launch",//配置文件的请求类型,有launch和attach两种,具体看官方文档
  12.             "targetArchitecture": "x64", //硬件内核架构,为64bit,如图设置
  13.             "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",//可执行文件的路径和文件名称
  14.             "args": ["file1", "file2"],//主函数调用时传入的参数
  15.             "stopAtEntry": true,//设为true时程序将暂停在程序入口处
  16.             "cwd": "${workspaceFolder}",//调试时的工作目录
  17.             "environment": [],
  18.             "internalConsoleOptions": "openOnSessionStart",//false
  19.             "externalConsole": false,//调试时是否显示控制台窗口
  20.             "MIMode": "gdb",//指定连接的调试器,可以省略不写
  21.             "miDebuggerPath": "D:/Program Files/mingw64/bin/gdb.exe",//安装minGW具体路径 更据自己安装的目录修改
  22.             "setupCommands": [
  23.                 {
  24.                     "description": "Enable pretty-printing for gdb",
  25.                     "text": "-enable-pretty-printing",
  26.                     "ignoreFailures": true
  27.                 }
  28.             ]
  29.         }
  30.     ]
  31. }
复制代码

tasks.json 配置内容如下:

  1. {
  2.     // See http://go.microsoft.com/fwlink/?LinkId=733558
  3.     // for the documentation about the tasks.json format
  4.     "version": "2.0.0",
  5.     "tasks": [
  6.         {
  7.             "label": "Build",
  8.             "type": "shell",
  9.             "command": "gcc",
  10.             "args": [
  11.                 "-g",
  12.                 "-o",
  13.                 "${fileBasenameNoExtension}",
  14.                 "${fileBasenameNoExtension}.c",
  15.             ],
  16.             "group": {
  17.                 "kind": "build",
  18.                 "isDefault": true
  19.             }
  20.         }
  21.     ]
  22. }
复制代码


配置完成后选择待调试的目标文件,按F5就可以调试代码。
微信图片_20200603210457.png
多个文件调试
和上面配置CodeRuner的Settings.json一样当少量文件时我们可以简单的修改tasks.json中的gcc命令实现。以前文的目录结构为例修改后的tasks.json:

  1. {
  2.     "version": "2.0.0",
  3.     "tasks": [
  4.         {
  5.             "label": "Build",
  6.             "type": "shell",
  7.             "command": "gcc",
  8.             "args": [
  9.                 "-g",
  10.                 "-o",
  11.                 "${fileBasenameNoExtension}",
  12.                 "main/src/${fileBasenameNoExtension}.c",
  13.                 "hello1/src/*.c",
  14.                 "hello2/src/*.c",
  15.                 "-I",
  16.                 "main/inc/",
  17.                 "-I",
  18.                 "hello1/inc/",
  19.                 "-I",
  20.                 "hello2/inc/",
  21.             ],
  22.             "group": {
  23.                 "kind": "build",
  24.                 "isDefault": true
  25.             }
  26.         }
  27.     ]
  28. }
复制代码

当程序文件很多架构大时同样需要配合Makefile使用,仍使用前文的例子修改tasks.json中的command如下:

  1. {
  2.     // See http://go.microsoft.com/fwlink/?LinkId=733558
  3.     // for the documentation about the tasks.json format
  4.     "version": "2.0.0",
  5.     "tasks": [
  6.         {
  7.             "label": "Build",
  8.             "type": "shell",
  9.             "command": "make",
  10.         }
  11.     ]
  12. }
复制代码

注意:launch.json文件中
"${workspaceFolder}/${fileBasenameNoExtension}.exe",//可执行文件的路径和文件名称要和Makefile生成的.exe路径一样。

收藏 1 评论3 发布时间:2020-6-3 21:06

举报

3个回答
xiaonihao444-20 回答时间:2020-6-3 22:13:48
学习了
radio2radio 回答时间:2020-6-3 23:03:02
为什么编译器不是 gcc-arm-none-eabi ?毕竟我们都是STM32 MCU.
likang1202 回答时间:2020-6-4 08:55:36
谢谢分享

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版