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

命令行内执行不同版本的make

在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,按需要点选即可。
三个task
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)
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值