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
### 使用 VSCodeCMake 构建多文件 C++ 工程 #### 创建工程文件夹结构 为了有效地管理多个文件和头文件,建议按照以下方式组织项目文件夹: - `include` 文件夹用于存放所有的 `.h` 或 `.hpp` 头文件。 - `src` 文件夹用于存放所有的 `.cpp` 源代码文件。 例如: ``` my_project/ ├── include/ │ └── my_header.h └── src/ ├── main.cpp └── another_file.cpp ``` #### 编写 CMakeLists.txt 文件 CMakeLists.txt 是 CMake 的核心配置文件,定义了如何构建整个项目。以下是创建该文件的一种常见做法: 1. **手动创建**:可以直接在项目的根目录下新建一个名为 `CMakeLists.txt` 的文本文件,并编辑其内容来描述项目的依赖关系和其他设置[^2]。 ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 14) add_subdirectory(src) ``` 2. **通过命令生成**:也可以借助 VSCode 中的 CMake 扩展提供的快捷指令(如 `CMake: Quick Start`),这将会帮助快速搭建起基本框架并自动生成必要的文件夹结构[^1]。 对于 `src/CMakeLists.txt` 可能看起来像这样: ```cmake file(GLOB SOURCES "*.cpp") add_executable(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include ) ``` 这段脚本告诉 CMake 将所有位于当前路径下的 .cpp 文件打包成一个可执行程序,并指定包含路径以便找到外部声明的函数原型或类定义。 #### 配置任务与启动套件 (Kit) 确保安装了一个合适的编译器作为 Kit 并进行了正确关联。如果状态栏未显示出可用的 Kits,则可以通过调用命令面板 (`Ctrl+Shift+P`) 来选择适当的操作完成初始化过程。 #### 进行编译操作 一旦完成了上述准备工作,就可以利用内置的任务系统来进行实际的编译工作。通常情况下只需要点击菜单中的 “终端 -> 运行构建任务...”,接着选取之前定义好的 make 命令即可触发完整的编译流程[^3]。 ```json { "version": "2.0.0", "tasks": [ { "label": "build project", "type": "shell", "command": "${workspaceFolder}/build/mingw32-make.exe" } ] } ``` 以上就是关于在 Visual Studio Code 上使用 CMake 管理复杂工程项目的大致介绍;当然还有许高级特性等待探索!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值