|
01 前言
有位朋友让我推荐一款Win10下好用的C语言编辑器,我毫不犹豫的选择了VSCode。免费、小而快、插件多这三点是我选择它的理由,本文就详解VsCode下编译、配置、调试C代码。(长文和多图预警!!可以收藏需要安装和配置时参考) 02 环境准备
编译器,VSCode只是个编辑器,C语言编译器要另外下载安装,笔者使用的MinGW64,安装好后一定不要忘记配置好环境变量,可以使用gcc -v确认编译器是否配置好。
VScode 官网下载安装。 03 编译运行
命令行编译运行 新建C文件,熟悉的HelloWorld。
这个时候可以使用命令行运行,VSCode菜单栏Terminal--->new Termial 如下进入目录直接运行。
一键运行 打开VSCode 安装下面俩个插件
安装好后选中c文件点击VSCode右上放的三角或者使用Ctrl+Alt+N即可运行。运行结果如下
多文件编译运行 上面讲述的都是单个文件的时候运行,从上面了解到其实Code Runner只是代替你手动输命令,当你需要少量的多文件运行,可以更改settings.json的gcc命令来实现。以如下目录结构为例,VSCode打开工作目录,
Ctrl+Shift+P 搜索settings 打开JSON文件
把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 $@ lt;
- $(OBJ_DIR)/%.o: $(HELLO1_SRC_DIR)/%.c
- $(cc) $(CFLAGS) -c -o $@ lt;
- $(OBJ_DIR)/%.o: $(HELLO2_SRC_DIR)/%.c
- $(cc) $(CFLAGS) -c -o $@ lt;
- .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下make命令要和编译器安装路径下的make可执行文件一致,我是把安装路径D:\Program Files\mingw64\bin\minGW64-make.exe修改为make.exe,不修改要使用minGW64-make命令 04 调试
我们经常要调试代码,下面来看看调试的配置。
打开工作目录(调试的话工作路径不能含有中文) 在工作目录下新建文件.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: http://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 http://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就可以调试代码。
多个文件调试 和上面配置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 http://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路径一样。
|