win10下使用VS Code编译、运行 和调试C

环境准备

  1. 编译器,笔者使用的MinGW64,安装好后一定不要忘记配置好环境变量,可以使用gcc -v确认编译器是否配置好。
    win10下使用VS Code编译、运行 和调试C_第1张图片
  2. VScode 官网下载安装。

编译运行

  • 命令行运行
    新建C文件,熟悉的HelloWorld。
    win10下使用VS Code编译、运行 和调试C_第2张图片
    这个时候可以使用命令行运行,VSCode菜单栏Terminal—>new Termial 如下进入目录直接运行。
    win10下使用VS Code编译、运行 和调试C_第3张图片
  • 一键运行
    打开VSCode 安装下面俩个插件(VSCode的强大之处很多大佬提供了丰富的插件)
    win10下使用VS Code编译、运行 和调试C_第4张图片
    安装好后选中c文件点击VSCode右上放的三角或者使用Ctrl+Alt+N即可运行。运行结果如下
    win10下使用VS Code编译、运行 和调试C_第5张图片
  • 多文件编译运行
    上面讲述的都是单个文件的时候运行,从上面了解到其实Code Runner只是代替你手动输命令,当你需要少量的多文件运行,可以更改settings.json的gcc命令来实现。以如下目录结构为例,VSCode打开工作目录,
    win10下使用VS Code编译、运行 和调试C_第6张图片
    Ctrl+Shift+P 搜索settings 打开JSON文件
    win10下使用VS Code编译、运行 和调试C_第7张图片
    把settings.json 修改如下:
{
    "files.autoGuessEncoding": true,
    "code-runner.runInTerminal": true,
    "files.associations": {},
    "code-runner.executorMap": {
        "c":"cd $dir && gcc *.c ../../hello2/src/*.c ../../hello1/src/*.c -I ../inc/ -I ../../hello2/inc/ -I ../../hello1/inc/ -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
    },
}

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

MainExt     =.exe
SourceExt   =.c
TargetExt   =.o

OBJ_DIR := obj
BIN_DIR := bin
MAIN_SRC_DIR := main/src
MAIN_INC_DIR := main/inc
HELLO1_SRC_DIR := hello1/src
HELLO1_INC_DIR := hello1/inc
HELLO2_SRC_DIR := hello2/src
HELLO2_INC_DIR := hello2/inc

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

MAIN_SRCS := $(wildcard $(MAIN_SRC_DIR)/*.c)
MAIN_HDRS := $(wildcard $(MAIN_INC_DIR)/*.h)
HELLO1_SRCS := $(wildcard $(HELLO1_SRC_DIR)/*.c)
HELLO1_HDRS := $(wildcard $(HELLO1_INC_DIR)/*.h)
HELLO2_SRCS := $(wildcard $(HELLO2_SRC_DIR)/*.c)
HELLO2_HDRS := $(wildcard $(HELLO2_INC_DIR)/*.h)
OBJS := $(patsubst $(MAIN_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(MAIN_SRCS))
OBJS += $(patsubst $(HELLO1_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(HELLO1_SRCS))
OBJS += $(patsubst $(HELLO2_SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(HELLO2_SRCS))

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

.DEFAULT_GOAL := $(TARGET)

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

$(OBJ_DIR)/%.o: $(MAIN_SRC_DIR)/%.c
	$(cc) $(CFLAGS) -c -o $@ $<

$(OBJ_DIR)/%.o: $(HELLO1_SRC_DIR)/%.c
	$(cc) $(CFLAGS) -c -o $@ $<

$(OBJ_DIR)/%.o: $(HELLO2_SRC_DIR)/%.c
	$(cc) $(CFLAGS) -c -o $@ $<

.PHONY: clean
clean:
	del .\$(BIN_DIR)\*.exe
	del .\$(OBJ_DIR)\*.o

把settings.json 修改如下:

{
    "files.autoGuessEncoding": true,
    "code-runner.runInTerminal": true,
    "files.associations": {},
    "code-runner.executorMap": {
        "c":"make && ./bin/main.exe",
    },
}

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

调试

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

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

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "-o",
                "${fileBasenameNoExtension}",
                "${fileBasenameNoExtension}.c",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

配置完成后选择待调试的目标文件,按F5就可以调试代码。
win10下使用VS Code编译、运行 和调试C_第9张图片

  • 多文件调试
    和上面配置CodeRuner的Settings.json一样当少量文件时我们可以简单的修改tasks.json中的gcc命令实现。以前文的目录结构为例
    修改后的tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "-o",
                "${fileBasenameNoExtension}",
                "main/src/${fileBasenameNoExtension}.c",
                "hello1/src/*.c",
                "hello2/src/*.c",
                "-I",
                "main/inc/",
                "-I",
                "hello1/inc/",
                "-I",
                "hello2/inc/",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

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

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "make",
        }
    ]
}

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

结尾

今天介绍win10下使用VS Code编译、运行 和调试C。
在这里插入图片描述
扫描上方二维码关注“嵌入式案例Show”公众号,看更多嵌入式案例

你可能感兴趣的:(win10下使用VS Code编译、运行 和调试C)