前言:网上好多同学发的都是单目录(一个文件夹下),多个cpp文件的联合编译。对于多文件夹,多目录,多个CPP文件的编译可查询的资料查起来不是很容易。
现在来总结一下:
一、单文件夹(即单目录)下的多.cpp使用code runner 运行代码的方式。
其他博文有介绍,基本是一个main.cpp hello world.cpp在一个文件夹下的介绍。
说明:单文件夹下的多个cpp的联合编译网上很多都是使用code runner 插件中的settings.json,修改g++ 后的参数为:*.cpp。code runner插件视乎只能完成到这这步,多目录,多文件夹的联合运行代码我尝试了始终不行。其实该插件只是为了方便不同代码的执行,一般而言我们主要都是使用一种语言如c++、或者Python,该插件在命令层面应该是和tasks.json文件中的 -g,-o 命令重复的,主要作用起到了一个命令覆盖的作用。也可以完全不使用该插件。
{
"files.associations": {
"charconv": "cpp",
"*.tcc": "cpp",
"iostream": "cpp"
},
//自动清除终端
"code-runner.clearPreviousOutput": true,
"code-runner.runInTerminal": true,
"code-runner.saveFileBeforeRun": true,
"code-runner.showExecutionMessage": false,
//每次清除Debug模式下(F5)的终端输出
"debug.terminal.clearBeforeReusing": true,
"code-runner.executorMap": {
//"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",$dirWithoutTrailingSlash
"cpp": "clear && cd $dir && g++ *.cpp && -o $fileNameWithoutExt && $dir$fileNameWithoutExt",//这种只适合所有的Cpp在同一个目录下
"python": "python -u",
//文件名及其目录等参数详解:
//:$fileName 当前不带目录的文件名,如 main.cpp 文件界面点击运行,$fileName = main.cpp
//: $fullFileName: The full name of the code file being run 这个效果和 参数 $filename 是一样的
//: $fileNameWithoutExt: The base name of the code file being run without its extension,不带扩展名的文件名
//: $dirWithoutTrailingSlash: 当前带目录的文件名,但目录路径没有斜杠
}
}
二、多文件夹,多目录、多cpp文件的联合编译
前面说到,使用code runner 暂时不知多文件夹下的联合编译,所以这里采取将code runner 插件禁用,直接使用tasks.json 、lanunch,json 和c_cpp_properties.json进行配置。
项目文件结构如下:工作区:CODE;在子文件夹中建立了子项目:MyCFD_1101,该项目下又存在三个子文件夹,分别存放cpp\h代码。
macin.cpp文件界面开始运行
tssks.json文件:修改 -g 后的参数命令,将所有要编译的cpp文件包含进去;修改 -I 后的参数命令将项目需要引用的头文件包含进去(不包含也能正常运行)。
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
//任务名
"label": "MyCFD",
"command": "D:/APP/mingw64/bin/g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",//生成和调试有挂信息
"-Wall",
//"${file}",
//"${fileDirname}\\*.cpp",//代表编译当前目录下的所有.cpp文件,大型项目,不同的cpp在不同目录下,run code 模式运行就会出现:undefined referecde to 'xxx函数'
"${workspaceFolder}\\code_test\\MyCFD_1101\\*.cpp ",
"${workspaceFolder}\\code_test\\MyCFD_1101\\readcase\\*.cpp",
"${workspaceFolder}\\code_test\\MyCFD_1101\\setequation\\*.cpp",
"${workspaceFolder}\\code_test\\MyCFD_1101\\solver\\run_steady_calculation\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",//exe文件存放地址
//"${workspaceFolder}\\code_test\\MyCFD_1101\\${fileBasenameNoExtension}.exe",
//"-fexec-charset=GBK"//该设置与vscode自带编码冲突,导致中文乱码
],
"options": {
"cwd": ""//当前工作文件夹目录,一般是build文件夹//"D:/APP/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": false,//是否显示任务命令在终端,但似乎不作用
"reveal": "silent",
"focus": true,
"panel": "shared",//每次代开一个新的C/C++:g++.exe build active file 窗口
"showReuseMessage": false,//不输出:终端将被任务重用,安任意键关闭
"clear": true
},
"detail": "compiler: D:/APP/mingw64/bin/g++.exe"
}
]
}
c_cpp_properties.json 文件配置中添加h文件路径:
{
"configurations": [
{
"name": "mingw64",
"includePath": [
//添加头文件路径
"${workspaceFolder}/**",
"${workspaceFolder}\\code_test\\MyCFD_1101\\readcase\\",
"${workspaceFolder}\\code_test\\MyCFD_1101\\setequation",
"${workspaceFolder}\\code_test\\MyCFD_1101\\solver\\run_steady_calculation"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "D:/APP/mingw64/bin/g++.exe",
"cStandard": "c17",
"cppStandard": "c++17",//是c++17,不是c17
"intelliSenseMode