作為一個程序員,VSCode、CMake并不陌生,然而,在MCU的開發(fā)過程中,底層很少選擇使用CMake去編譯工程,多數(shù)還是使用目標芯片對應的工具鏈編譯,常見的編譯器:HighTec、Tasking、GreenHills、Keil等等。如果進行SOA(Service Oriented Architecture)架構(gòu)開發(fā),使用一些軟實時操作系統(tǒng)時(eg:Linux),搭配CMake使用,構(gòu)建進程的編譯會方便很多。本文,主要介紹VSCode+CMake環(huán)境搭建以及示例。 提示:本文操作系統(tǒng)Windows10 64b關(guān)于VSCode、CMake的安裝教程,網(wǎng)上很多,本文不過多贅述。
(一)VSCode官方下載地址
鏈接:https:///projects/mingw/1、CMake、CMake Tools插件安裝,如下所示:
2、C/C++、C/C++ Extension Pack插件安裝,如下所示:
編寫源文件之前,先創(chuàng)建一個工作區(qū),操作如下:文件->打開文件夾...(選擇一個目標文件夾)。 本文在VSCode_CMake文件夾下創(chuàng)建工作區(qū),如下所示:
(一)CMakeLists.txt文件編寫
CMakeLists.txt文件內(nèi)容如下所示: # 設(shè)置項目名稱 project(CMakePro)
set(CMAKE_C_COMPILER "gcc") set(CMAKE_CXX_COMPILER "g++")
#指定CMake版本 set(CMAKE_CXX_STANDARD 11)
# 將當前文件中的所有文件放到變量DIR_TOOT_SRCS中 # aux_source_directory 查找某路徑下的所有源文件,"."表示當前路徑 aux_source_directory(. DIR_TOOT_SRCS) # 將變量DIR_TOOT_SRCS中的源文件編譯源碼生成目標,目標文件名稱CMakePro add_executable(CMakePro ${DIR_TOOT_SRCS})
#include <iostream> #include <vector> #include <string>
using namespace std;
int main() { vector<string> MsgInfo {"HelloWorld","VSCode","CMake"};
for (const string& info : MsgInfo) { cout << info << " " << endl; } getchar(); }
(三)另存工作區(qū)
具體操作:文件->將工作區(qū)另存為...
自定義工作的名稱,本文VSCode_CMake,文件后綴.code-workspace,如下所示: VSCode_CMake.code-workspace內(nèi)容如下所示,設(shè)置CMake的IDE,本文選則"MinGW Makefiles"。"cmake.generator": "MinGW Makefiles"
使用快捷鍵:Ctrl+Shift+P,選擇目標CMake工具包,如下所示:
本文選擇"GCC 12.2.0 x86_64-w64-mingw32",如下所示:
(1)創(chuàng)建.vscode文件夾
(2)創(chuàng)建c_cpp_properties.json文件{ "configurations": [ { "name": "GCC", "defines": ["_DEBUG", "UNICODE", "_UNICODE"], //g++路徑 "compilerPath": "C:/msys64/mingw64/bin/g++.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64", "configurationProvider": "vector-of-bool.cmake-tools", "includePath": [ "${default}", "${workspaceFolder}/**" ] } ], "version": 4 } (3)創(chuàng)建launch.json文件launch.json文件內(nèi)容如下所示:{ "version": "0.2.0", "configurations": [ { "name": "C/C++: g++.exe build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "g++" } ] } (4)創(chuàng)建tasks.json文件{ "tasks": [ { "type": "cppbuild", "label": "g++", "command": "C:\\msys64\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
當然,如上的*.json文件也可以通過"調(diào)試配置"自動生成,選擇調(diào)試方式,會自動生成對應的*.json文件,如下所示: 注意:tasks.json文件的label與launch.json文件中的preLaunchTask保持一致,如下所示:參考資料:https://code./docs/cpp/config-mingw
可以在終端使用命令查看CMake和Make的安裝情況,如下所示:
如果習慣了bash命令,只要安裝了git,可以切換shell,在終端輸入:bash,如下所示: CMake編譯之前,可以先將本地安裝的CMake.exe路徑添加到"設(shè)置"中,如下所示:
(一)終端中,手動進行源文件編譯
1、使用cmake命令,如下所示: cmake -S . -B Build -G "MinGW Makefiles" https:///cmake/help/latest/manual/cmake.1.html提示:-B
構(gòu)建項目文件所在的目錄,-G(Generator ),設(shè)置 IDE。 在源文件對應的文件夾下會自動生成一個build文件夾,如下所示:
2、使用make命令,生成可執(zhí)行文件(CMakePro),如下所示:
2、進行項目配置,如下所示
3、編譯文件,通過"輸出"窗口查看輸出信息,如下所示: 生成文件,均輸出到build文件夾,與手動執(zhí)行命令產(chǎn)生的結(jié)果一致,如下所示: 最后,進行目標文件,在終端(eg:PowerShell)運行可執(zhí)行文件,本文示例如下:(一)在調(diào)試C/C++文件中選擇"調(diào)試C/C++文件",如下所示:
(二)程序調(diào)試如下所示: 提示:生成可執(zhí)行文件以后,方可調(diào)試。
|