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

这篇具有很好参考价值的文章主要介绍了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代码。

windows vscode 多个cpp文件编译,vscode,ide,编辑器

macin.cpp文件界面开始运行

windows vscode 多个cpp文件编译,vscode,ide,编辑器

        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": "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": "gcc-x64"
        }
    ],
    "version": 4
}

launch.json文件:

{
    
    "configurations": [
    {
        "name": "(gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
       
        "preLaunchTask": "MyCFD", //任务名,任意取 
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", //设置生成的main.exe文件放在哪,位置任意放,不影响编译
        "internalConsoleOptions": "openOnFirstSessionStart",
        "args": [],
        "stopAtEntry": false,
        //"cwd": "${fileDirname}",//当前的打开的文件,你从main.cpp文件界面开始运行,那就是main.cpp
        "cwd": "${workspaceFolder}",//当前打开的文件的工作目录, 我们需要针对整个工作区
        "environment": [],
        "externalConsole": false, //使用vscode控制台输出
        "MIMode": "gdb",
        "miDebuggerPath": "D:/APP/mingw64/bin/gdb.exe",
        "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
            }
        ]
    }  
    ]
}

结果:

windows vscode 多个cpp文件编译,vscode,ide,编辑器

-----------------------------------解下来介绍在vscod 上使用Cmake进行编译构建项目-------------------------

首先我们从最简单的Cmake开始,并包含可能出现的错误的解决方案

一、在命令面板中选择Cmake的编译工具包,就是我们自己下载安装的ming64

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

生成了CMakeLists.txt、main.cpp和build文件夹以及其中的makefiles等文件。

windows vscode 多个cpp文件编译,vscode,ide,编辑器

上面几步关于可能出现错误:

错误1:vscode is not a full path to an existing compiler tool.

原因:编译器选择错误,仔细核对一下路径,并重新选择正确的。

错误2:CMake Error: Could not create named generator Mingw makefies

windows vscode 多个cpp文件编译,vscode,ide,编辑器

解决办法:将参数:"cmake.generator": "Mingw makefies",注释掉,

或者:

windows vscode 多个cpp文件编译,vscode,ide,编辑器

错误3:一致卡在:[main] 正在配置项目: code 这里

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

查看生成的demo.exe

windows vscode 多个cpp文件编译,vscode,ide,编辑器

------------------------------------上面是是初步使用Cmake、Cmaketool来快速熟悉使用--------------------

现在我们使用CmakeLists.txt来编译调试最开始的子项目:MyCFD_1101。注意这里为方便,项目名称,以及输出的exe文件名,和json文件中的任务名都统一为了main。

windows vscode 多个cpp文件编译,vscode,ide,编辑器

再重新修改tasks,json文件:修改command 命令参数为 cmake ,并去除重复的cpp文件

windows vscode 多个cpp文件编译,vscode,ide,编辑器

c_cpp_properties.json:去除重复引入的头文件

windows vscode 多个cpp文件编译,vscode,ide,编辑器

launch.json文件:修改program参数,确定调试时exe文件的所在目录

windows vscode 多个cpp文件编译,vscode,ide,编辑器

编译项目,生成exe文件:,如果遇到:undefined reference to xxx 报错,那肯定是CmakeLists.txt中没有包含cpp或者h文件。记住是将所有的.h和.cpp文件包含进去,包括主文件main.cpp。

windows vscode 多个cpp文件编译,vscode,ide,编辑器

下面开始运行、调试代码:

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

        到此为止,我们从最开始的单纯使用vscode 的 json文件进行不同目录下的联合编译调试,再使用Cmake插件来正确生成build文件夹以及CMakeList.txt文件快速入门,并结合自己的项目文件,编写自己的CMakeList.txt,同时再重新配合json文件实现了项目运行和调试。

---------------------------------------更进一步:纯命令cmake\make编译项目-----------------------------

两步走:

第一步:

1. 配置正确的CMakeLists.txt(配置好后会自动生成build文件夹),并使用一下命令之一来生成makefiles文件

命令:cmake -G "Unix Makefiles" .. 

命令:cmake -G "MinGW Makefiles" ..

第二步:使用命令: make  来生成main.exe可执行文件(而不是用vscode下方的生成按钮)

以上两种命令都可以生成build文件夹下的CmakeFiles等系列文件

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

   命令: cmake -G "Unix Makefiles" ..  出现错误解决方法:

CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage        
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage      
-- Configuring incomplete, errors occurred!

windows vscode 多个cpp文件编译,vscode,ide,编辑器

解决方案:将安装的mingw32-make.exe 复制一份 重命名为 make.exe

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

相关错误:Unix Makefiles 与 MinGW Makefiles 冲突。

解决方案:在settings.json中设定 "cmake.generator": "Unix Makefiles",

在window下,vscode 未定义cmake 生成器时,在修改CMakeLists.txt时,终端会自动进行编译,但默认选择的是 MinGW Makefiles 模式,编译器也会调用MSVC。这事可能就会前后产生冲突。,错误如下。

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器

在设定生成器之后,如下:

windows vscode 多个cpp文件编译,vscode,ide,编辑器

windows vscode 多个cpp文件编译,vscode,ide,编辑器文章来源地址https://www.toymoban.com/news/detail-791640.html

到了这里,关于vscode Cmake 多目录,多文件夹,多文件联合编译配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Centos系列:centos7 共享文件夹配置、使用mount -t cifs 挂载windows共享目录方法与问题解决

    1.创建共享文件夹 打开CentOS终端,输入命令,查看共享文件夹情况 2.挂载共享目录 在/mnt下创建hgfs文件夹,作为共享目录 挂载共享目录 在文件末尾添加 保存重启即可 如果centos系统因权限无法查看共享文件夹内容 大功告成!!! 参考网址: https://blog.csdn.net/u013112749/article/

    2024年02月02日
    浏览(60)
  • cp命令 复制多个目录/文件夹下文件到指定目录

    可以使用cp命令的通配符和递归选项来复制多个目录下多个文件夹下的文件到指定目录。 如果目标目录不存在,可以使用 mkdir -p命令来创建目录。 -p 选项表示递归创建目录,如果目录已经存在,则不会报错。 例如,以下命令会复制 /path/to/dir1和 /path/to/dir2 下的所有子目录中的

    2024年02月12日
    浏览(67)
  • 3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java

    1、hadoop3.1.4简单介绍及部署、简单验证 2、HDFS操作 - shell客户端 3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java 4、HDFS-java操作类HDFSUtil及junit测试(HDFS的常见操作以及H

    2024年02月16日
    浏览(55)
  • Linux移动文件和文件夹(目录)命令

    命令mv 英文move 翻译移动 mv命令可以移动文件或文件夹(目录),也可以重命令(覆盖)文件。 1. 移动文件/重命名 单纯地移动某一个文件直接使用: 这个方法也可以用来修改文件的名称。 2. 移动文件夹(目录)下的内容 如要移动某个文件夹下的 某个内容: 即可移走###内容

    2024年02月06日
    浏览(46)
  • 《基于 Vue 组件库 的 Webpack5 配置》6.将字体库和图片等静态资料,编译后打包至指定文件夹

    参考 Rule.generator.filename package.json 的配置如下

    2024年02月11日
    浏览(67)
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    在1文件夹中有1,2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 源文件 复制后: 参考1 源文件 复制后 参考2 如果复制bmp文件就将 suffix = \\\".json\\\" 改为 suffix = \\\".bmp\\\"

    2024年02月11日
    浏览(85)
  • 安卓的工程目录文件夹简单介绍

    当创建了一个安卓工程之后,系统会生成很多文件夹,那么这些文件夹都存放的是什么东西呢? src:存放java代码,有包,有文件。相当于普通java程序的src文件夹。 gen:存放自动生成的文件。R.java存放的是程序的页面、按键、文本等的id。 Android 4.4和Android Private Libaries:安卓

    2024年02月05日
    浏览(49)
  • 【Python】获取指定目录下的文件夹和文件

    我们经常会有对文件做批量处理的需求,获取指定目录下的文件夹和文件(有时需要获取所有文件,即子目录下的文件也需要获取)。Python 中扫描目录有两种方法: os.listdir() os.walk() 建立项目框架如下: 其中, test:项目文件夹名称,含有 aa子文件夹 和 main.py aa:文件夹,含

    2024年02月17日
    浏览(67)
  • 【ubuntu】修改文件夹(目录)及其内部文件的权限

    目录 修改文件夹(目录)及其内部文件的权限 在 Ubuntu 中,你可以使用 chmod 命令来修改文件夹(目录)及其内部文件的权限。下面是一个将文件夹及其内部所有文件的权限都修改为相同权限的示例命令: 其中, permission 是权限设置,表示所需的权限,例如 755 或 777 , fold

    2024年02月03日
    浏览(45)
  • windows共享文件夹(目录)(SMB服务)

    SMB服务,文件共享服务,俗称文件夹(目录)、打印机等共享 windos系统中,文件夹共享需要设置指定用户与密码,通过输入用户和密码进行连接,在设置共享时系统中有Everyone所有人设置,允许所有人直接访问,但是访问基本不成功,所以需要指定用户与密码去进行访问,提

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包