提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
vscode与Cmake
文件配置(windos)
不用cmake:
如果有多个相同的头文件,在查看的时候,会按照includePath中的路径次序进行索引。
c_cpp_properties.json
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "E:/Vscode/gcc/TDM-GCC-64/bin/gcc.exe",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}
更改launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"preLaunchTask": "compile",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
]
}
更改tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "g++",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"group": "build"
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "E:/Vscode/gcc/TDM-GCC-64/bin/g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
]
}
采用cmake:
tasks.json
{
"version": "2.0.0",
"options": {
"cwd": "${fileDirname}/build"
},
"tasks": [
{
"type": "shell",
"label": "cmake",
"command": "cmake",
"args": [
"..",
"-G",
"MinGW Makefiles"
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "make",
"args": [
]
},
{
"label": "Build",
"dependsOrder": "sequence", // 按列出的顺序执行任务依赖项
"dependsOn":[
"cmake",
"make"
]
}
]
}
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/build/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true, //此项为true,否则会出现问题
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "Build"
}
]
}
CMakelist.txt(最简版本):
#Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#set C++ version
set(CMAKE_CXX_STANDARD 11) //根据情况修改
# set debug
set(CMAKE_BUILD_TYPE "Debug")
#Set the project name
project(120) #PROJECT:工程的名称,和支持的语言
#Add an executable
Add_executable(ReadAndAdd ReadAndAdd.cpp) #可执行文件的名称,和相关源文件;可以用空格或者分号加更多的文件,这样就可以同时编译多个源文件
CMakelist.txt(多个文件):
#Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#set C++ version
set(CMAKE_CXX_STANDARD 11) //根据情况修改
# set debug
set(CMAKE_BUILD_TYPE "Debug")
#Set the project name
project(chapter2) #PROJECT:工程的名称,和支持的语言
#Add include path
include_directories(src)
#Add an executable
Add_executable(BookStore BookStore.cpp src/Sales_data.h) #可执行文件的名称,和相关源文件;可以用空格或者分号加更多的文件,这样就可以同时编译多个源文件
VSCODE自带的各种路径
${workspaceFolder} :表示当前workspace文件夹路径(the path of the workspace folder that contains the tasks.json file),也即C:\Users\admin\Desktop\test
${workspaceRootFolderName}:表示workspace的文件夹名,也即test
${file}:文件自身的绝对路径,也即C:\Users\admin\Desktop\test.vscode\launch.json
${relativeFile}:文件在workspace中的路径,也即.vscode\launch.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即launch
${fileBasename}:当前文件的文件名,launch.json
${fileDirname}:文件所在的文件夹路径,也即C:\Users\admin\Desktop\test.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量
官网链接:https://code.visualstudio.com/docs/editor/variables-reference
二、使用步骤
输入cmake . ,发现问题:
CMake Error at CMakeLists.txt:6 (project):
Running
failed with:
系统找不到指定的文件。
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "E:/cppseries/C++prime/C-prime/cpps/11/CMakeFiles/CMakeOutput.log".
查了下发现好像是关于默认generator的问题,因为我用的是MinGW,在命令后加入-G "MinGW Makefiles"即可
即输入命令cmake . -G "MinGW Makefiles"或者使用cmake_gui更改。
然后再cmake 扩展中配https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#:%7E:text=A%20CMake%20Generator%20is%20responsible%20for%20writing%20the,what%20native%20build%20system%20is%20to%20be%20used置"MinGW Makefiles"到generator里。
输入make,发现问题2:
make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ make
+ ~~~~
+ FullyQualifiedErrorId : CommandNotFoundException
PS E:\cppseries\C++prime\C-prime\cpps\11\build> make
make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ make
+ ~~~~
+ CategoryInfo : ObjectNotFound: (make:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
在gcc\TDM-GCC-64\bin中找到mingw32-make.exe文件,目录不变直接复制粘贴,将粘贴后的文件重命名为make.exe即可。
vscode调试时,发现问题三
PS E:\cppseries\C++prime> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-1lmouv23.din=Microsoft-MIEngine-In-1lmouv23.n5f' '--stdout=Microsoft-MIEngine-Out-tg3otpda.oqe' '--stderr=Microsoft-MIEngine-Error-wbppi5bd.kez' '--pid=MicrosbgExe=E:\Vscode\gcc\TDM-GCC-64\bin\oft-MIEngine-Pid-kzjzok3o.jcg' '--dbgExe=E:\Vscode\gcc\TDM-GCC-64\bin\gdb.exe' '--interpreter=mi'
PS E:\cppseries\C++prime> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-jewlnqxg.0kl' '--stdout=Microsoft-MIEngine-Out-5242pmnj.jm0' '--stderr=Microsoft-MIEngine-Error-afunspl0.x05' '--pid=Microsoft-MIEngine-Pid-hnionnxy.f20' '--dbgExe=E:\Vscode\gcc\TDM-GCC-64\bin\gdb.exe' '--interpreter=mi'
PS E:\cppseries\C++prime> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-vlikhfh3.pzf' '--stdout=Microsoft-MIEngine-Out-ixk1tq4i.0iu' '--stderr=Microsoft-MIEngine-Error-pqqjoyah.fm2' '--pid=Microsoft-MIEngine-Pid-qtchf5la.hjm' '--dbgExe=E:\Vscode\gcc\TDM-GCC-64\bin\gdb.exe' '--interpreter=mi'
PS E:\cppseries\C++prime> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-pisji5pe.dbu' '--stdout=Microsoft-MIEngine-Out-10dqwlfg.wi3' '--stderr=Microsoft-MIEngine-Error-qmqvblqd.3uc' '--pid=Microsoft-MIEngine-Pid-kpl4vyvm.ir3' '--dbgExe=E:\Vscode\gcc\TDM-GCC-64\bin\gdb.exe' '--interpreter=mi'
将 “externalConsole”: false,改为"externalConsole": true,问题解决,这个错误我相当难以理解,不过有用就行