实际上VSCode 编译C++文件就是通过向g++ 传递参数实现的,因此即使是不同包下面的cpp文件或者.h文件都是可以通过修改g++的编译参数实现,而在VSCode中,task.json文件其实就是在配置g++的编译参数,因此我们可以通过修改task.json里面的参数,实现不同包下cpp文件的编译。
首先打开一个空的文件夹,然后新建一个main.cpp文件,和一个mycpp文件夹。
在mycpp 文件夹里面创建sum.cpp和sum.h文件。
main.cpp
cpp
#include<iostream>
#include"mycpp/sum.h"
using namespace std;
int main()
{
cout<<sum(1,3);
}
sum.h
cpp
#ifndef SUM_HEADER
#define SUM_HEADER
int sum(int a,int b);
#endif
sum.cpp
cpp
#include"sum.h"
int sum(int a,int b)
{
return a+b;
}
运行直接报错,找不到sum函数的定义。
这时候task.json是下面这样的
cpp
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "F:\\FrameWork\\mingw64\\bin\\g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
只需要改变args里面的参数就可以了,fileDirname就是CPPTEST2 这个文件夹,第一个"{fileDirname}\\\\\*.cpp",用来编译main.cpp,第二个 "{fileDirname}\\mycpp\\*.cpp"用来编译sum.cpp和sum.h。
代码就是下面这样
cpp
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "F:\\FrameWork\\mingw64\\bin\\g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${fileDirname}\\*.cpp",
"${fileDirname}\\mycpp\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
切换到main函数,再次运行代码,成功打印出4。
大家要是用过g++ 直接编译文件,就可以相当容易理解这种方式了,比如下面这种,同样可以编译多个不同文件下的cpp文件,并且运行效果和VSCode一样。