launch.json, tasks.json利用CMakeLists配置出错

一个简单的helloworld.cpp,运用CMakeLists进行编译,一切都设置好了,

launch.json和tasks.json也配置好了;

手动进行编译的话,能够成功

mkdir build

cd build

cmake -G "MinGW Makefiles" ..

mingw32-make

一切正常

但是如果是配置好json文件,就始终不行:

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/cmake_hello.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:/CppCompiler/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
                }
            ],
            "preLaunchTask": "Build"
        }
    ]
}

 tasks.json

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "type": "cppbuild",
            "label": "cmake",
            "command": "cmake",
            "args": ["-G", "\"MinGW Makefiles\"", ".."],
            "group": "build",
            "detail": "cmake -G \"MinGW Makefiles\" .."
        },
        {
            "options": {
                "cwd": "${workspaceFolder}/build",},
            "type": "cppbuild",
            "label": "make",
            "command": "mingw32-make",
            "args": [],
            "group": "build",
            "detail": "make"
        },
        {
            
            "label": "Build",
            "dependsOn": [
                "cmake",
                "make"
            ]
        }
    ]
}

始终报错,不明原因;

原因是vscode的相对路径有问题,这个问题一直存在,虽然按照网上一的些方法做过修改,但是

.. 却不是上一层目录,而是工作目录的上一层目录,单个点 . 不代表该文件所在目录,而是工作目录;

以你为是设置问题,但是其实在其它文件下,单个点 . 又代表了当前目录;

甚至于你,同一个文件多次运行,相对路径出会现报错的情况,vscode它一会儿识别为当前目录,一会儿又识别为工作目录,乱七八糟,恶心死你;

所以,改成绝对路径,问题就好了;

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "type": "cppbuild",
            "label": "cmake",
            "command": "cmake",
            "args": ["-G", "\"MinGW Makefiles\"", "${workspaceFolder}"],
            "group": "build",
            "detail": "cmake -G \"MinGW Makefiles\" ${workspaceFolder}"
        },
        {
            "options": {
                "cwd": "${workspaceFolder}/build",},
            "type": "cppbuild",
            "label": "make",
            "command": "mingw32-make",
            "args": [],
            "group": "build",
            "detail": "make"
        },
        {
            
            "label": "Build",
            "dependsOn": [
                "cmake",
                "make"
            ]
        }
    ]
}

另外,这个

"options": {

        "cwd": "${workspaceFolder}/build"

    },

要放在单个task里面,不然也是混乱的,会报错的。

如果一次运行只是成功生成了Makefile, 那就再运行一次,就又成功生成了可执行文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于C++的开发,我们可以配置VS Code的tasks.json文件来自动化执行编译、运行和调试等任务。下面详细介绍配置C++的tasks.json文件的步骤和常用属性: 1. 在VS Code中打开一个C++项目,并创建tasks.json文件。 2. 在tasks.json文件中,定义一个编译任务。一般情况下,我们使用g++编译器来编译C++代码。具体的代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Compile C++", "type": "shell", "command": "g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Compile C++" 表示任务的名称,可以根据需要自行修改。 - "type": "shell" 表示使用Shell命令执行任务。 - "command": "g++" 表示要执行的编译命令,这里使用g++编译器。 - "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"] 表示要传递给编译命令的参数,其中: - "-g" 表示生成调试信息。 - "${file}" 表示当前打开的文件。 - "-o" 表示指定输出文件的名称。 - "${fileDirname}/${fileBasenameNoExtension}" 表示输出文件的路径和名称,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "group" 表示该任务属于build的组,并且是默认的任务。 - "problemMatcher" 用于捕获编译输出的错误信息。 3. 在tasks.json文件中,定义一个运行任务。具体代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Run C++", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Run C++" 表示任务的名称,可以根据需要自行修改。 - "type": "shell" 表示使用Shell命令执行任务。 - "command": "${fileDirname}/${fileBasenameNoExtension}" 表示要执行的运行命令,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "group" 表示该任务属于test的组,并且是默认的任务。 4. 在tasks.json文件中,定义一个调试任务。具体代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Debug C++", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Debug C++" 表示任务的名称,可以根据需要自行修改。 - "type": "cppdbg" 表示使用C++调试器执行任务。 - "request": "launch" 表示启动调试器并进行调试。 - "program": "${fileDirname}/${fileBasenameNoExtension}" 表示要进行调试的程序,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "args": [] 表示传递给程序的参数,这里为空数组。 - "stopAtEntry": false 表示是否在程序入口处停止调试。 - "cwd": "${workspaceFolder}" 表示程序的工作目录。 - "environment": [] 表示环境变量,这里为空数组。 - "externalConsole": false 表示是否在外部控制台中进行调试。 以上三个任务定义中,"group" 属性用于将任务分组,可以方便地在任务面板中进行查找和执行。同时,"isDefault" 属性用于指定默认执行的任务。 最后,给出两个配置C++的tasks.json文件的示例代码: 示例1:使用g++编译和执行C++程序 ``` { "version": "2.0.0", "tasks": [ { "label": "Compile and Run C++", "type": "shell", "command": "g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, { "label": "Run C++", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 示例2:使用CMake编译和执行C++程序 ``` { "version": "2.0.0", "tasks": [ { "label": "Configure CMake", "type": "shell", "command": "cmake", "args": ["-B", ".", "-DCMAKE_BUILD_TYPE=Debug"], "group": { "kind": "build", "isDefault": true } }, { "label": "Build C++", "type": "shell", "command": "cmake", "args": ["--build", "."], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, { "label": "Run C++", "type": "shell", "command": "${fileDirname}/build/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 需要注意的是,示例2中的任务需要在C++项目的根目录下包含一个CMakeLists.txt文件,并且使用CMake来构建项目。其中,“Configure CMake”任务用于生成构建文件,“Build C++”任务用于编译项目,“Run C++”任务用于运行程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值