{
"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下make命令要和编译器安装路径下的make可执行文件一致,我是把安装路径D:\Program Files\mingw64\bin\minGW64-make.exe修改为make.exe,不修改要使用minGW64-make命令
打开工作目录(调试的话工作路径不能含有中文)
在工作目录下新建文件.vscode并创建tasks.json 和launch.json,可以手动创建也可以Ctrl+Shift+P 弹出的对话框中搜索后根据引导创建。创建完成后根据自己的需求修改内容,下面给出单文件和多文件的一个示例。
{
// 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
}
}
]
}
{
"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”公众号,看更多嵌入式案例