VS Code no creará programas C++ con múltiples archivos fuente .cpp

Resuelto Danny Hepple asked hace 6 años • 20 respuestas

Tenga en cuenta que estoy usando VS Code en Ubuntu 17.10 y usando el compilador GCC.

Tengo problemas para crear un programa simple que utilice archivos .cpp adicionales. Probablemente me estoy perdiendo algo obvio ya que soy bastante nuevo en la programación, pero explicaré lo que he hecho hasta ahora. Esto es algo que me impide continuar con un tutorial que estoy haciendo.

He escrito un programa muy simple para demostrar mi punto de la siguiente manera.

principal.cpp


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

using namespace std;

int main ()
{

speak();

return 0;
}

gato.h


#pragma once



void speak();

gato.cpp


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

using namespace std;

void speak()
{
std::cout << "Meow!!" << std::endl;

}

Este sencillo programa se integra tanto en Codeblocks como en Visual Studio Community 2017 sin problemas y no sé qué debo hacer para que se ejecute. Este error en la parte inferior indica que el archivo Cat.cpp no ​​se está recuperando en absoluto. Si tuviera que colocar la definición de este Cat.cpp en el archivo de encabezado, el programa se compila y se ejecuta bien, pero necesito usar ese archivo .cpp, ya que entiendo que esta es la forma aceptada de separar el código. Notaré que todos los archivos también están en la misma carpeta.

Entiendo que es posible que deba indicarle a VS Code dónde buscar el archivo Cat.cpp, pero me resulta extraño que encuentre el encabezado en la misma ubicación. Sin embargo, después de buscar en línea, leí que es posible que necesite colocar un directorio en c_cpp_intellisense_properties.json. Así es como se ve el mío.

{
"configurations": [
    {
        "name": "Mac",
        "includePath": [
            "/usr/include",
            "/usr/local/include",
            "${workspaceRoot}"
        ],
        "defines": [],
        "intelliSenseMode": "clang-x64",
        "browse": {
            "path": [
                "/usr/include",
                "/usr/local/include",
                "${workspaceRoot}"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        },
        "macFrameworkPath": [
            "/System/Library/Frameworks",
            "/Library/Frameworks"
        ]
    },
    {
        "name": "Linux",
        "includePath": [
            "/usr/include/c++/7",
            "/usr/include/x86_64-linux-gnu/c++/7",
            "/usr/include/c++/7/backward",
            "/usr/lib/gcc/x86_64-linux-gnu/7/include",
            "/usr/local/include",
            "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
            "/usr/include/x86_64-linux-gnu",
            "/usr/include",
            "/home/danny/Documents/C++_Projects/24_-_Classes/Cat.cpp",
            "${workspaceRoot}",
            "/home/danny/Documents/C++_Projects/24_-_Classes/",
            "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode",
            "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp"
        ],
        "defines": [],
        "intelliSenseMode": "clang-x64",
        "browse": {
            "path": [
                "/usr/include/c++/7",
                "/usr/include/x86_64-linux-gnu/c++/7",
                "/usr/include/c++/7/backward",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
                "/usr/include/x86_64-linux-gnu",
                "/usr/include",
                "${workspaceRoot}",
                "/home/danny/Documents/C++_Projects/24_-_Classes/",
                "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    },
    {
        "name": "Win32",
        "includePath": [
            "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
            "${workspaceRoot}"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE"
        ],
        "intelliSenseMode": "msvc-x64",
        "browse": {
            "path": [
                "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
                "${workspaceRoot}"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    }
],
"version": 3
}

En un momento me pregunté si necesitaba agregar un comando doble allí para indicarle al compilador que compilara ambos archivos .cpp en task.json, pero no he logrado descubrir cómo hacerlo, o incluso si es lo correcto. acercarse.

tareas.json


{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "Build",
        "type": "shell",
        "command": "g++ -g /home/danny/Documents/C++_Projects/24_-_Classes/main.cpp -o Classes",
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "problemMatcher":"$gcc"
    }
]
}

Agradezco cualquier ayuda. Y en caso de que te lo preguntes, la razón por la que no termino el tutorial en Codeblocks o VS Community es que me gusta saber qué sucede bajo el capó en la mayoría de las cosas. Además, me gustaría que VS Code funcionara para mí, ya que hasta ahora ha sido fantástico.

Danny Hepple avatar Dec 06 '17 09:12 Danny Hepple
Aceptado

en tareas.json:

        "label": "g++.exe build active file",
        "args": [
            "-g",
            "${fileDirname}\\**.cpp",
            //"${fileDirname}\\**.h",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe",
        ],

en lanzamiento.json:

"preLaunchTask": "g++.exe build active file"

Funcionará si tus fuentes están en una carpeta separada.

Anns98 avatar Dec 08 '2019 15:12 Anns98

sintiendo pereza,

Esto es tasks.jsonde vscode para distribuciones de Linux, para compilar múltiples archivos cpp.

{
"version": "2.0.0",
"tasks": [
    {
        "type": "shell",
        "label": "C/C++: g++ build active file",
        "command": "/usr/bin/g++",
        "args": [
            "-g",
            "${fileDirname}/*.cpp",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}"
        ],
        "options": {
            "cwd": "/usr/bin"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]
}
kzs avatar Apr 18 '2020 17:04 kzs

Esta es una respuesta de Windows para el mismo problema:

Yo también estaba luchando con esto hasta que encontré la siguiente respuesta en https://code.visualstudio.com/docs/cpp/config-mingw :

Puede modificar su task.json para crear varios archivos C++ utilizando un argumento como "${workspaceFolder}\\*.cpp"en lugar de ${file}. Esto creará todos los archivos .cpp en su carpeta actual. También puede modificar el nombre del archivo de salida reemplazándolo "${fileDirname}\\${fileBasenameNoExtension}.exe"con un nombre de archivo codificado (por ejemplo "${workspaceFolder}\\myProgram.exe").

Tenga en cuenta que la F en workspaceFolder está en mayúscula.

Como ejemplo, en mi archivo task.json de mi proyecto, el texto entre corchetes bajo "args" apareció originalmente de la siguiente manera:

"-g",
  "${file}",
  "-o",
  "${fileDirname}\\${fileBasenameNoExtension}.exe"

Esto me dio errores de referencia porque solo estaba compilando uno y no ambos archivos.

Sin embargo, pude hacer que el programa funcionara después de cambiar ese texto a lo siguiente:

"-g",
"${workspaceFolder}\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
KBurchfiel avatar Apr 17 '2020 02:04 KBurchfiel