VSCode C++ 使用Cmake编译多个文件

VSCode 中对编译运行单个文件时非常友好,基本上不用配置,自动生成的即可运行,
或者安装Code Run 也可以很方便的运行起来,但是对于有多个类文件存在的情况下,就很糟糕,
我了解到有两种方式来支持

  1. task.json 中编译的参数
  2. 引入cmake编译 CMakeLists.txt文件

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            // "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "program": "${workspaceFolder}\\build\\outProject.exe",     // 运行编译之后的文件,需要与CMakeLists.txt 文件中定义的保持一致!!!
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\dev\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // "preLaunchTask": "C/C++: g++.exe build active file"
            "preLaunchTask": "Build"        // 指定调用 task.json 脚本中的  Build 任务
        }
    ]
}

cmake 编译步骤

1、编写 CMakeLists.txt 文件 写好需要生成的文件名称,以及需要编译的文件
add_executable(outProject main.cpp swap.cpp)
2、进入 build 目录下执行 "cmake .." 命令
3、执行make命令,触发编译 ,windows 平台可以调用mingw64下的 mingw32-make.exe 来编译

task.json

{
    "version":"2.0.0",
    "options": {                             
        "cwd": "${workspaceFolder}/build"    // 调用该task.json 任务时,首先进入到 build目录下
    },
    "tasks": [
        { 
            "type": "shell",
            "label": "cmake",          // 构造  "cmake .. " 命令
            "command":"cmake",
            "args": [
                ".."
            ]

        },
        {
            "type": "shell",
            "label": "make",       // 使用make命令来编译,当前window下使用到了mingw64 下的mingw32-make.exe 来触发
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "command":"mingw32-make.exe"
        },
        {
            "label": "Build",    // launch.json 文件中调用的 "preLaunchTask": "Build",会调用到此Task
            "dependsOn":[        // 该task下依赖其他两个任务 cmake 、make 任务
                "cmake",
                "make"
            ]

        }

    ],

}

CMakeLists.txt

project(my_swap)

# 一个依赖类的编译 
# 参数含义outProject  编译之后的exe 文件  需要编译的源码文件 如果有多个可以依次写
add_executable(outProject main.cpp swap.cpp)  
posted @ 2020-11-18 21:36  坑坑kk  阅读(1443)  评论(0编辑  收藏  举报