vscode Cmake 多目录,多文件夹,多文件联合编译配置

前言:网上好多同学发的都是单目录(一个文件夹下),多个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值