筆者在C++ PrimerPlus的學習過程中遇到了多個源文件編譯運行的問題,由於筆者使用的是VSCode,軟件本身並不支持多個源文件編譯運行,可以通過一些方法來使VsCode支持多文件編譯運行。筆者經研究發現,有三種方法:分別是基於g++命令、基於Cmakelist方法、以及最簡單的安裝工程插件法,第二種方法可以加深對編譯過程的理解和VsCode的json配置文件的理解,推薦大家可以嘗試試一下。
本文以一個交換函數為示例,演示了這三種方法。
Vscode工作區目錄如下:

其中各文件內容如下:
頭文件:
void swap(int &a, int &b);
主函數源碼文件:
#include<iostream>
#include"swap.h"
using namespace std;
int main()
{
int val1 = 10;
int val2 = 20;
cout << "Before swap:\n";
cout << "val1 = " << val1;
cout << ", val2 = " << val2 << endl;
swap(val1, val2);
cout << "after swap:\n";
cout << "val1 = " << val1;
cout << ", val2 = " << val2 << endl;
return 0;
}
交換函數源碼文件:
// swap.cpp
#include"swap.h"
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
1.基於g++命令
1.1 打開終端,點擊菜單去終端的新建終端,打開終端窗口;
1.2 g++編譯多文件,生成帶調試信息的可執行文件
命令如下:
g++ -g .\main.cpp .\swap.cpp -o main
其中 -g 后面是兩個源代碼文件的名稱,-o 后面是生成exe文件的名稱
執行后會生成一個exe文件
如圖所示:

1.3 直接在終端運行該文件,命令為:
.\main.exe
運行結果如下:

1.4 要想調試該函數,需要修改launch.json文件。
點擊運行調試會產生一個tasks.json文件,一個launch.json文件,但無法成功調試,如圖所示:

點擊open'launch.json',修改文件,該文件中有兩個關鍵參數,一個是program:另一個是preLaunchTask:如下圖所示:

將preLaunchTask:注釋掉,該行會在調試前運行tasks.json,先注釋掉,將program:的參數修改成
"program": "${workspaceFolder}/main.exe",
修改后如下圖所示:

點擊運行調試,發現可以調試運行。
2. 基於Cmakelist
該方法需要安裝cmake環境,安裝方法可以參考這位大佬的教程
安裝cmake教程
2.1 編寫最簡單的CMakeLists.txt
project(MYSWAP) // 工程名
add_executable(my_cmake_swap main.cpp swap.cpp) // 生成exe文件名,需要編譯的源函數文件名稱
編寫完保存之后會生成一個build文件夾,里面包括編譯文件所需的一些信息。
2.2 生成build文件夾之后在終端輸入cd build,進入該文件夾
2.3 在命令行輸入cmake ..
注:如果電腦上已經安裝了VS,應該會調用微軟MSVC編譯器,使用(cmake -G "MinGW Makefiles" ..)代替(cmake ..)即可
僅第一次使用cmake時使用(cmake -G "MinGW Makefiles" ..) 后面可使用(cmake ..)
結果如下:

2.4 接着在命令行輸入mingw32-make.exe,編譯文件鏈接文件,之后的結果如下:

生成 my_cmake_swap.exe文件在build目錄下,如下圖所示:

2.5 修改launch.json文件,和第一中方法一樣,修改program:
修改的代碼如下:
"program": "${workspaceFolder}/build/my_cmake_swap.exe",
接下來運行文件,運行結果如下:

2.6 該代碼可以調試文件,但是在修改源代碼文件之后,直接運行,文件並不會重新編譯,要相解決這個問題,重新編寫tasks.json文件。重新編寫的tasks.json的文件如下:
{
"version": "2.0.0" ,// 多文件編譯的tasks
"options": {
"cwd": "${workspaceFolder}/build"
},
"tasks": [
{
"type": "shell",
"label": "make",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command":"mingw32-make.exe",
"args": [
]
},
{
"label": "Build",
"dependsOn":[
"cmake",
"make"
]
}
]
}
2.7 修改完tasks.json文件,還需要修改launch.json文件的preLaunchTask:這一行,修改為"preLaunchTask": "Build"便可將文件鏈接起來,修改如下圖所示:

3. 安裝C/C++ Project Generator插件,如下圖所示:

該插件會自動幫我們完成CMakeList文件的編寫以及json文件的修改。
3.1 按下crtl+shift+p,輸入create,找到Create C++ project,如下圖所示:

點擊它,產生一個選擇文件夾的窗口,選擇或者創建一個C++項目文件夾。
創建后如下圖所示:

3.2 在include文件夾添加頭文件,在src文件夾添加源函數文件,然后運行就可以
注:主函數的文件必須命名為main.cpp
如下圖所示:

點擊調試運行,就可以完成。
總結:
VsCode的自定義功能很強大,通過實現其多個文件編譯運行,是我對C++的文件單獨編譯運行有了一個比較深刻的認識,中間也遇到了很多問題,最終查找解決的這些問題,特別感謝bilibili的一個視頻,讓我入門了Cmakelist,大家想看的話,視頻鏈接如下:
VsCode環境配置及多文件編譯運行
