前言
本文介紹了利用vscode編譯復(fù)雜工程的方法,包括gcc和cmke編譯時 tasks.json launch.json c_cpp_properties.json 的具體配置。
一、編譯代碼
使用例子
c/c++在windows下編譯:使用MinGW gcc從零編譯項目
二、g++配置tasks.json launch.json c_cpp_properties.json
tasks.json
編譯程序所需要的指令
{
"tasks": [
//下面兩條g++語句編譯動態(tài)庫
{
"type": "cppbuild",
"label": "build_shared_step1", //相當(dāng)于這條g++語句的標(biāo)識
"command": "/usr/bin/g++", //編譯器安裝的完整路徑
"args": [
"-g","*.cpp","-c","-fPIC" //相當(dāng)于/usr/bin/g++ -g *.cpp -c -fPIC 將當(dāng)前目錄下的所有.cpp文件都生成.o文件
],
"options": {
"cwd": "${fileDirname}/../shared" //${fileDirname}為main函數(shù)所在目錄,意思是進(jìn)入到shared目錄
},
"group": "build"
},
{
"type": "cppbuild",
"label": "build_shared_step2", //該條g++語句的標(biāo)識
"command": "/usr/bin/g++",
"args": [
"-g","-shared","*.o","-o","../../lib/libmulti.so" //g++ -g -shared *.o -o ../../lib/libmuti.so 將當(dāng)前路徑的.o文件生成.so動態(tài)庫放入lib下
],
"options": {
"cwd": "${fileDirname}/../shared"
},
"group": "build",
"dependsOn": [
"build_shared_step1" //這條g++語句的執(zhí)行依賴于上一條g++的執(zhí)行
]
},
//下面兩條語句編譯靜態(tài)庫
{
"type": "cppbuild",
"label": "build_static_step1",
"command": "/usr/bin/gcc",
"args": [
"-g","*.cpp","-c" // /usr/bin/gcc -g *.cpp -c 當(dāng)前目錄下的所有.cpp文件生成.o文件
],
"options": {
"cwd": "${fileDirname}/../static" //進(jìn)入static目錄
},
"group": "build"
},
{
"type": "cppbuild",
"label": "build_static_step2",
"command": "/usr/bin/ar",
"args": [
"rcs","../../lib/libadd.a","*.o" // /usr/bin/ar rcs ../../lib/libadd.a *.o 將所有.o文件打包成靜態(tài)庫
],
"options": {
"cwd": "${fileDirname}/../static"
},
"group": "build",
"dependsOn": [
"build_static_step1" //該條g++語句依賴于上一條g++語句生成的.o文件
]
},
//生成可執(zhí)行文件
{
"type": "cppbuild",
"label": "build_main", //生成可執(zhí)行程序命令名稱,launch.json會使用
"command": "/usr/bin/g++",
"args": [
"-g","*.cpp","-o","../../bin/app","-I../../include",
"-L../../lib","-lmulti","-ladd","-Wl,-rpath=../lib"
],
"options": {
"cwd": "${fileDirname}"
},
"group": "build",
"dependsOn": [
"build_shared_step2", //可執(zhí)行文件生成依賴生成靜態(tài)庫和動態(tài)庫的g++語句
"build_static_step2"
]
}
],
"version": "2.0.0"
}
上述tasks.json相當(dāng)于在腳本中執(zhí)行以下幾條命令
#生成動態(tài)庫
cd ${fileDirname}/../shared
/usr/bin/g++ -g *.cpp -c -fPIC
g++ -g -shared *.o -o ../../lib/libmuti.so
#生成靜態(tài)庫
cd ${fileDirname}/../static
/usr/bin/gcc -g *.cpp -c
/usr/bin/ar rcs ../../lib/libadd.a *.o
#生成可執(zhí)行文件
cd ${fileDirname}
/usr/bin/g++ -g *.cpp -o ../../bin/app -I../../include -L../../lib -lmulti -ladd -Wl,-rpath=../lib
每一條命令都要在tasks.json中的tasks中進(jìn)行配置,如果工程過大,就會顯得tasks.json非常臃腫和復(fù)雜,所以需要減少命令,可以通過編寫makefile 和cmake。
launch.json
配置可執(zhí)行程序的調(diào)試信息
{
"version": "0.2.0",
"configurations": [
{
"name": "aaaaa",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/../../bin/app", //tasks.json生成可執(zhí)行文件的路徑
"args": [], //可執(zhí)行文件需要的參數(shù)
"stopAtEntry": false, //是否在main函數(shù)處停住
"cwd": "${fileDirname}/../../bin", //進(jìn)入可執(zhí)行文件目錄
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb", //gdb的完整路徑
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi",
"preLaunchTask": "build_main" //在調(diào)試前需要完成的任務(wù),這里是生成可執(zhí)行程序那條g++語句
}
]
}
tasks.json和launch.json中的依賴關(guān)系如下圖:
c_cpp_properties.json
只在程序進(jìn)行展示的時候有用
{
"configurations": [
{
"name": "linux-gcc-x64",
"includePath": [
"${workspaceFolder}/**" //設(shè)置頭文件所在路徑,防止在打開程序是頭文件飄紅
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}
三 cmake配置tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "build_cmake",
"command": "cmake",
"args": [
"-DCMAKE_INSTALL_PREFIX=${fileDirname}/../../install",
" -DCMAKE_BUILD_TYPE=Release",
" -DCMAKE_OS_ARCH=x86",
"-DCMAKE_OS_TYPE=linux",
"."
],
"options": {
"cwd": "${fileDirname}/../../"
},
"group": "build",
},
{
"type": "cppbuild",
"label": "build_make",
"command": "make",
"args": [],
"options": {
"cwd": "${fileDirname}/../../"
},
"group": "build",
"dependsOn":[
"build_cmake"
]
},
{
"type": "cppbuild",
"label": "build_install",
"command": "make",
"args": ["install"],
"options": {
"cwd": "${fileDirname}/../../"
},
"group": "build",
"dependsOn":[
"build_cmake"
]
}
],
"version": "2.0.0"
}
上面tasks.json相當(dāng)于如下三句指令:
cmake . -DCMAKE_INSTALL_PREFIX=${fileDirname}/../../install -DCMAKE_BUILD_TYPE=Release -DCMAKE_OS_ARCH=x86 -DCMAKE_OS_TYPE=linux
make
make install
四 調(diào)試代碼
在main.cpp界面點擊右上角如圖,出現(xiàn)如下界面:其中綠色的compilerun 點擊過后會報編譯錯誤,因為綠色的是編譯器默認(rèn)的tasks.json;如果我們是一個文件的程序,可以直接點三角形默認(rèn)生成tasks.json,這時就選擇ComlieRun進(jìn)行編譯。紅色的就會執(zhí)行我們修改后的tasks.json,Debug c/c++ File表示編譯運(yùn)行,但是不會在斷點處停留;Run C/C++ File 會編譯調(diào)試可執(zhí)行程序,并且會在斷點處停留。
點擊Debug C/C++出現(xiàn)如下界面,會展示tasks.json中的每一個任務(wù),紅色的就是我們tasks.json中的所有任務(wù),點擊對應(yīng)任務(wù)我們就能值編譯這一個任務(wù)。綠色的就是編輯器默認(rèn)的tasks.json這里并不存在,如果選擇就會編譯出錯。
我們將可執(zhí)行程序通過launch.json配置了調(diào)試信息,其中這條調(diào)試在launch.json中命名為aaaaa,我們點擊這一條就能對可執(zhí)行程序進(jìn)行調(diào)試了。
選擇 Debug c/c++ File -----> aaaaa 就能進(jìn)行斷點調(diào)試。文章來源:http://www.zghlxwxcb.cn/news/detail-744978.html
總結(jié)
vscode一鍵配置C/C++多個C及CPP文件編譯與tasks.json和launch.json原理文章來源地址http://www.zghlxwxcb.cn/news/detail-744978.html
到了這里,關(guān)于vscode編譯多文件復(fù)雜項目時tasks.json launch.json 的配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!