vsCode中使用makefile实现debug/release版本的编译
简单代码
为了测试,创建文件hello.cpp,编写以下简单代码。
// hello.cpp
#include <iostream>
int main()
{
std::cout <<"hello\n";
system("pause");
return 0;
}
make命令向makefile文件传输参数
在g++命令中加入-g即为debug版本,加入-O2即为release版本。为了实现同一个makefile文件就可以编译两种版本,需要在makefile文件中加入一个变量,来指引g++命令。以下makefile文件中的第一行,加入了一个变量CFLAG,这一变量在执行make命令时直接指定,然后makefile文件将根据输入的CFLAG的值来执行不同版本的g++命令。(如执行 make CFLAG=-g后,将生成debug版本)
# makefile 文件
CCFLAGS = ${CFLAG}
CCFLAGS += -Wall
all:
g++ ${CCFLAGS} hello.cpp
.PHONY: clean
clean:
rm -rf a.exe
在VSCode中创建不同的task
以上通过命令行方式实现了不同版本的编译。下面通过在VSCode中合理地创建task,使VSCode具备上述功能。
# task.json
{
"tasks": [
{
"label": "build_debug",
"type": "shell",
"command": "make CFLAG=-g",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
},
{
"label": "build_release",
"type": "shell",
"command": "make CFLAG=-O2",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
},
{
"label": "clean",
"type": "shell",
"command": "make clean",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$eslint-compact"
]
}
]
}
以上task.json文件中创建了三个task,创建时直接把本来在cmd窗口中需要的命令写入"command"字段,即可在需要时运行对应命令。task的名字在 "label"字段中,可随意指定。
在VSCode中按快捷键ctrl+shift+B,弹出这三个可选的task,按需要点选即可。
延伸:提供一个稍微通用一点的makefile
以下makefile文件可以将其所在目录的所有.h和.cpp文件一起进行编译,并将结果放在buildFolder(此文件中定义为"./Build")中。同样地,此makefile也可以实现debug/release版本的编译。
CCFLAGS = ${CFLAG}
cc = g++
buildFolder=./Build/
prom = $(buildFolder)a.exe
deps = $(wildcard *.h)
src = $(wildcard *.cpp)
obj = $(patsubst %.cpp, $(buildFolder)%.o, $(src))
header_path = -I .
CCFLAGS += -Wall
$(prom): $(obj)
$(cc) ${CCFLAGS} -o $(prom) $(obj) $(header_path)
$(buildFolder)%.o: %.cpp $(deps)
$(cc) ${CCFLAGS} -c $< -o $@ $(header_path)
.PHONY: clean
clean:
rm -rf $(obj) $(prom)