Linux/Manjaro如何配置Vscode的C/C++編譯環(huán)境
Linux/Manjaro配置Vscode的C/C++編譯環(huán)境
安裝gcc/g++
Arch/Manjaro安裝gcc和g++非常簡單
安裝gcc和gcc-libs
sudo pacman -S gcc sudo pacman -S gcc-libs sudo pacman -S gdb
安裝vscode
安裝vscode,使用yay搜索軟件包
yay -S visual-studio-code-bin
直接安裝最新版本即可
如果還沒有安裝yay,需要通過git克隆yay的代碼倉庫
# 安裝base-devel sudo pacman -S base-devel # 安裝git sudo pacman -S git # cd到/opt cd /opt # 通過git克隆yay的代碼倉庫 sudo git clone https://aur.archlinux.org/yay.git #設(shè)置權(quán)限,將lin改為你的用戶名 sudo chown -R lin:users ./yay # 進入yay文件夾并安裝yay cd yay makepkg -si
然后再執(zhí)行安裝vscode的命令
yay -S visual-studio-code-bin
配置vscode的C/C++環(huán)境
安裝插件
點擊拓展,安裝幾個基本的插件:
- C/C++、C/C++ Extension pack、C/C++ Themes
- Code Runner:
- snippet:代碼段模板
- Chinese:中文插件,安裝好后重啟vscode
先寫一個hellow程序
在資源管理器中打開工作空間,我這里是/home/lin/Code/Cgit。 新建一個hellow文件夾,在文件夾中新建三個文件hellow.cpp
map.cpp
map.h
用來方便測試后面的json文件是否配置完成。
編寫下面的文件
//hellow.cpp #include "map.h" #include <iostream> #include <string> #include <vector> using namespace std; int i = 1; int main() { cout << "Hellow World" << " " << AandB(i); cout << endl; }
//map.cpp #include <iostream> using namespace std; int AandB(int a) { a++; return a; }
//map.h #ifndef MAP_H #define MAP_H extern int i; int AandB(int a); #endif
編寫好后保存文件,下面就可以開始編寫json文件,來引導(dǎo)vscode編譯程序了。
編寫json文件
json文件現(xiàn)在非常好讀,通過chatgpt即可根據(jù)需求編寫對應(yīng)的json文件,這里將介紹一些比較基本的設(shè)置項和如何設(shè)置json文件以引導(dǎo)編譯C/C++文件。
編寫完的json文件可以在這個網(wǎng)站查詢是否有效
編寫vscode設(shè)置項json文件
首先點擊文件-首選項-設(shè)置,右上角有一個打開設(shè)置的圖標(biāo)
這里會打開vscode設(shè)置項的settings.json文件,這個文件包含了一些vscode的基本設(shè)置。
{ "C_Cpp.files.exclude": { "**/.vscode": true, "**/.vs": true }, "C_Cpp.default.customConfigurationVariables": {}, "code-runner.runInTerminal": true, "code-runner.saveFileBeforeRun": true, "C_Cpp.default.compilerPath": "/usr/bin/clang", "files.autoGuessEncoding": true, "security.workspace.trust.untrustedFiles": "open" }
上面是我的settings.json文件,大家可以直接用,其中code-runner
需要安裝code runner插件。
"C_Cpp.files.exclude": {...}
:這個設(shè)置項是 C/C++ 擴展的配置,用于指定要排除在項目外的文件。在這個例子中,**/.vscode
和**/.vs
目錄下的文件將被排除在項目外。"C_Cpp.default.customConfigurationVariables": {}
:這個設(shè)置項是 C/C++ 擴展的配置,用于指定自定義的編譯選項。在這個例子中,沒有指定任何自定義編譯選項。"code-runner.runInTerminal": true
:這個設(shè)置項是 Code Runner 擴展的配置,用于指定代碼是否在終端中運行。在這個例子中,設(shè)置為true
,即代碼將在終端中運行。"code-runner.saveFileBeforeRun": true
:這個設(shè)置項是 Code Runner 的配置,用于指定代碼是否在運行前保存。在這個例子中,設(shè)置為true
,即代碼將在運行前自動保存。"C_Cpp.default.compilerPath": "/usr/bin/clang"
:這個設(shè)置項是 C/C++ 擴展的配置,用于指定默認的編譯器路徑。在這個例子中,指定為/usr/bin/clang
,即使用 clang 編譯器。"files.autoGuessEncoding": true
:這個設(shè)置項用于指定是否自動猜測文件編碼。在這個例子中,設(shè)置為true
,即 Visual Studio Code 將嘗試自動猜測文件編碼。"security.workspace.trust.untrustedFiles": "open"
:這個設(shè)置項用于指定未受信任的文件的打開方式。在這個例子中,設(shè)置為open
,即未受信任的文件將以只讀模式打開。
編寫編譯json文件
上面在工作空間中我打開的是/home/lin/Code/Cgit,并在這個文件夾下創(chuàng)建了一個hellow文件。在工作空間目錄下創(chuàng)建一個新的文件夾.vscode
,用來存放我們的json文件。 在新創(chuàng)建的.vscode
文件中新建四個文件: c_cpp_properties.json
:用來設(shè)置編譯器的路徑和頭文件路徑等信息。 launch.json
:調(diào)試配置文件,用于在編寫 C/C++ 代碼時配置調(diào)試器 settings.json
:設(shè)置項配置文件,用來設(shè)置一些編譯C/C++程序時的一些設(shè)置選項 tasks.json
:任務(wù)配置文件,用于定義一些自定義任務(wù),以便在編輯器中執(zhí)行它們。
創(chuàng)建后的工作空間是這樣的
settings.json
{ "files.defaultLanguage": "cpp", "editor.formatOnType": true, "editor.formatOnSave": true, "editor.snippetSuggestions": "top", "code-runner.runInTerminal": true, "code-runner.executorMap": { "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt.out", "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt.out" }, "code-runner.saveFileBeforeRun": true, "code-runner.clearPreviousOutput": false, "C_Cpp.clang_format_sortIncludes": true, "C_Cpp.intelliSenseEngine": "default", "cmake.configureOnOpen": false, "files.associations": { "iosfwd": "cpp" } }
settings.json
文件沒有什么好改的,如果想自己設(shè)置可以問chatgpt
c_cpp_properties.json
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/${workspaceFolderBasename}", "/usr/include", "/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include/" ], "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-x64", "defines": [ "_DEBUG", "UNICODE", "__GNUC__=7", "__cdecl=__attribute__((__cdecl__))" ], "browse": { "path": [ "${workspaceFolder}", "/usr/include", "/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include/", "/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include-fixed/", "/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/install-tools/include/" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 }
c_cpp_properties.json
主要需要修改的是includePath
,這個選項包含了頭文件的地址,需要自己設(shè)置一下自己編寫的頭文件的目錄,我比較習(xí)慣直接將頭文件放在工程目錄,就添加"${workspaceFolder}/${workspaceFolderBasename}"
${workspaceFolder}
是工作空間名稱變量代表 ${workspaceFolderBasename}
是運行程序所在目錄,如果我運行/home/lin/Code/Cgit/hellow/hellow.cpp
,這個變量就是hellow 我添加的頭文件目錄就是/home/lin/Code/Cgit/hellow/
,我們只需要在項目文件夾中編寫頭文件即可
如果習(xí)慣在項目文件夾中單獨建一個問價夾存放頭文件可以在
includePath
添加"${workspaceFolder}/${workspaceFolderBasename}/include"
把頭文件放在include文件夾中即可
tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "創(chuàng)建并調(diào)試C文件", "type": "shell", "command": "gcc", "args": [ "-I", "${workspaceFolder}/${relativeFileDirname}", "-g", "${workspaceFolder}/${relativeFileDirname}/*.cpp", "-o", "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out" ], "group": "build" }, { "label": "創(chuàng)建并調(diào)試C++文件", "type": "shell", "command": "g++", "args": [ "-I", "${workspaceFolder}/${relativeFileDirname}", "-g", "${workspaceFolder}/${relativeFileDirname}/*.cpp", "-o", "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out" ], "group": "build" }, { "label": "創(chuàng)建并運行C文件", "type": "shell", "command": "gcc", "args": [ "-I", "${workspaceFolder}/${relativeFileDirname}", "${workspaceFolder}/${relativeFileDirname}/*.cpp", "-o", "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out" ], "group": "build" }, { "label": "創(chuàng)建并運行C++文件", "type": "shell", "command": "g++", "args": [ "-I", "${workspaceFolder}/${relativeFileDirname}", "${workspaceFolder}/${relativeFileDirname}/*.cpp", "-o", "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out" ], "group": "build" } ] }
tasks.json
文件會生成.exe
或.out
文件,linux我們就選擇.out
文件,這里需要修改的是"args"
這里對應(yīng)的是gcc或g++編譯指令。 我們這里設(shè)置的是
"args": [ "-I", "${workspaceFolder}/${relativeFileDirname}", "${workspaceFolder}/${relativeFileDirname}/*.cpp", "-o", "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out" ]
在編譯hellow.cpp
的時候就會執(zhí)行g++ -I /home/lin/Code/Cgit/hellow /home/lin/Code/Cgit/hellow/*.cpp -o /home/lin/Code/Cgit/hellow/hellow.out
下面是每個參數(shù)的解釋:
g++
:這個參數(shù)指定了使用的編譯器,這個例子中為 g++ 編譯器。-I /home/lin/Code/Cgit/hellow
:這個參數(shù)指定了頭文件的搜索路徑,/home/lin/Code/Cgit/hellow
是頭文件所在的目錄。/home/lin/Code/Cgit/hellow/*.cpp
:這個參數(shù)指定了要編譯的源文件,/home/lin/Code/Cgit/hellow
是源文件所在的目錄,*.cpp
表示編譯該目錄下所有的 C++ 源文件。-o /home/lin/Code/Cgit/hellow/hellow.out
:這個參數(shù)指定了生成的可執(zhí)行文件的輸出路徑,/home/lin/Code/Cgit/hellow/hellow.out
是生成的可執(zhí)行文件的完整路徑。
每次編譯完成都會在項目目錄中生成.out
文件,當(dāng)然也可以自己設(shè)置.out
文件的保存路徑,但同樣需要修改launch.json
文件,
launch.json
{ "version": "0.2.0", "configurations": [ { "name": "Run C", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}/${relativeFileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "創(chuàng)建并運行C文件" }, { "name": "Run C++", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}/${relativeFileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "創(chuàng)建并運行C++文件" }, { "name": "Debug C", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}/${relativeFileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "創(chuàng)建并調(diào)試C文件" }, { "name": "Debug C++", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}/${relativeFileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "創(chuàng)建并調(diào)試C++文件" } ] }
launch.json
文件設(shè)置了編譯 C/C++ 代碼時配置調(diào)試器,有幾點需要特別注意
- "preLaunchTask"名稱一定要與
tasks.json
文件中的lable
一致,這將影響調(diào)試時是否能找到對應(yīng)的調(diào)試器 - "cwd"用于指定調(diào)試器的當(dāng)前工作目錄,要設(shè)置成你的項目目錄,不然讀取C++讀取文件的時候相對路徑會出現(xiàn)問題
- "program"要與
tasks.json
文件中的args
中的“-o”的地址一致,不然讀取不到.out
文件,我這里都設(shè)置的是`"workspaceFolder/{workspaceFolder}/workspaceFolder/{relativeFileDirname}/${fileBasenameNoExtension}.out"``
以上設(shè)置完成json文件,我們就可以運行C++程序了
運行hellow.cpp
- 資源管理器中點擊hellow.cpp進入文件,點擊左側(cè)欄中帶有小蟲子圖標(biāo)的“運行和調(diào)試”
- 選擇”debug C++“,這里的名稱是在
launch.json
中的"name"
設(shè)置的找到對應(yīng)的就行。 - 點擊綠色三角運行。
- 終端輸出
Hellow World 2
表示配置成功
到此這篇關(guān)于Linux/Manjaro配置Vscode的C/C++編譯環(huán)境的文章就介紹到這了,更多相關(guān)Vscode的C/C++編譯環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Protocol Buffer技術(shù)深入理解(C++實例)
C++實例Protocol Buffer技術(shù)詳解,感興趣的朋友可以了解下2013-01-01C++實現(xiàn)LeetCode(84.直方圖中最大的矩形)
這篇文章主要介紹了C++實現(xiàn)LeetCode(84.直方圖中最大的矩形),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C++實現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序
這篇文章主要為大家詳細介紹了C++實現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05