当一个工程文件夹中存在多个.c文件时,vscode默认只能实现单个文件的编译。
方法一:通过命令行进行编译
gcc/g++ -o [要生成的.exe可执行文件] [待编译的.c文件(以空格分开)] -I [头文件的路径]
在终端中运行heap即可
方法二:当文件数量很多时使用cmake工具进行编译
1.首先在官网下载cmake,并添加对应路径到系统的环境变量中
2.在项目的文件夹中添加一个CMake文件叫做 CMakeLists.txt
3.对CMakeLists.txt进行编辑
project(HeapMake)
aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)
add_executable(heap ${SRC_SUB} ${SRC_CUR})
include_directories(include)
${变量名}:取变量的值
".":表示当前目录;".."表示上一级目录
由于两个源文件不在一个路径下,所以需要调用aux_source_directory(dir VAR)两次
project() :设置cmake的项目名称,参数可以随意指定
aux_source_directory(dir VAR): 搜索 dir 目录下所有的源文件,并将结果列表存储在变量 VAR 中
add_executable(target src): 指定使用源文件src,生成可执行程序 target
include_directories(headDir): 设置包含的头文件目录
4. ctrl+shift+p选择cmake配置、
同时生成了build文件夹
5.在终端中分别输入
cd build ->
cmake ..(对上一级目录中的文件进行编译)->
mingw32-make.exe(在之前要写入环境变量的那个路径中一定要有这个文件)
最后在build文件夹下生成了可执行文件.exe
关于调试部分tasks.json与launch.json中的一些解释
1.program: 要调试的可执行程序的路径,里边可以使用一些宏,宏的外部加 ${} 表示取值,即要执行的.exe文件的路径
2.${fileDirname}:当前这个文件所在目录的名字,launch.json 对应的目录名就是 .vscode
3.${fileBasenameNoExtension}:不带扩展名的文件名
4.${workspaceFolder}:工作区目录,就是该工程的项目所在的最大的文件夹的路径
5.preLaunchTask:调试项目前要执行的任务,C/C++: g++.exe 生成活动文件是tasks.json中的一个任务,通过执行这个任务生成了program对应的可执行文件
最后两个文件如下
tasks.josn:
{
"version": "2.0.0",
"options": {
//进入到工作区目录,这里的"${workspaceFolder}/build/"相当于进入到HEAP/build/
"cwd": "${workspaceFolder}/build/"
//组合起来就是 "cd HEAP/build"
},
"tasks": [
{
//该命令的标题
"label": "cmake",
"type": "shell",
//命令
"command": "cmake",
//命令选项即参数
"args": [
".."
]
//组合起来就是"cmake .."
},
{
//该命令的标题
"label": "make",
"group":{
"kind":"build",
"isDefault":true
},
"command": "mingw32-make.exe",
"args":[
]
//组合起来为"mingw32-make.exe"
},
{
//该命令的标题
"label":"Build my project",
//这一条命令是执行"cmake"与"make"这两个标题对应的命令,以实现自动化编译
"dependsOn":[
"cmake",
"make"
]
}
]
}
launch.json:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
//由于在CMakeLists.txt中确定了可执行程序的名称为heap且默认生成在build路径下,所以在这需要指明所在路径
"program": "${workspaceFolder}/build/heap.exe",
"args": [],
"stopAtEntry": false,
"cwd": "E:\\msys64\\ucrt64\\bin",
"environment": [],
"console": "externalTerminal",
"MIMode": "gdb",
"miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",//调试程序的路径
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
//这里的值与tasks.json中最后一个labal中的值一样
"preLaunchTask": "Build my project"
}
]
}
参考文章:链接: https://subingwen.cn/vscode/cpp-windows/ 作者: 苏丙榅