尝试在 C++ VS Code 中分离头文件和实现文件时,GDB 不会构建 exe 文件

问题描述 投票:0回答:1

我是 C++ 新手,在分离头文件和实现文件方面存在问题,当我只使用实现文件或在头文件中包含函数定义时,它可以工作,但是如果我只在头文件中使用函数原型,那么我会得到错误“preLaunchTask 'C/C++: g++.exe build active file' 终止,退出代码 -1。”。

我一直在尝试不同的 launch.json 配置,但似乎没有任何效果,所以我迷失了,有人可以告诉我我在这里做错了什么吗?我制作了一组简化的文件来帮助隔离这个问题,它们是:

来自 basicInput.h(标题):

#include <iostream>

float inputPrompts(const std::string currentPrompt);

来自basicInput.cpp(实现):

#include "basicInput.h"
#include <iostream>

float inputPrompts(const std::string currentPrompt) {
    float inputReturn;
    std::cout << currentPrompt;
    std::cin >> inputReturn;

    return inputReturn;
}

来自main.cpp:

#include "basicInput.h"
#include <iostream>

int main() {
    std::cout << inputPrompts("Enter a number: ");

    return 0;
}

所有文件都在同一个文件夹中,编译器是g++。

我尝试在 Replit 中放入具有相同文件名的完全相同的代码,看看这是否只是我的编译器的问题,并且运行良好,所以我知道它必须与我的配置有关,我只是不知道问题到底是什么。我尝试过使用不同的 launch.json 配置来看看这是否是问题所在,但我尝试过的任何方法都不起作用,尽管常规的单文件源代码编译仍然很好。每次都没有生成 .exe 并且程序甚至没有开始运行,不知道是什么原因导致的。

来自tasks.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: cl.exe build active file",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/nologo",
                "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
                "${workspaceFolder}/*.cpp"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
c++ gdb g++
1个回答
0
投票

首先查看你的tasks.json 文件

"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
    "-fdiagnostics-color=always",
    "-g",
    "${file}",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

这告诉 VSCode 从单个文件构建您的程序。特别是,它告诉 VSCode 从您当前在编辑器中处于活动状态的文件进行构建。显然,当您尝试从多个文件构建时,这不起作用。

它应该是这样的

"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
    "-fdiagnostics-color=always",
    "-g",
    "main.cpp",
    "basicinput.cpp",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

查看如何明确提及这两个必需文件。

© www.soinside.com 2019 - 2024. All rights reserved.