web-dev-qa-db-fra.com

VS Code ne construira pas de programmes c ++ avec plusieurs fichiers source .ccp

Notez que j'utilise VS Code sur Ubuntu 17.10 et que j'utilise le compilateur GCC.

J'ai du mal à créer un programme simple qui utilise des fichiers .ccp supplémentaires. Je manque probablement quelque chose d'évident ici car je suis assez nouveau dans la programmation, mais je vais expliquer ce que j'ai fait jusqu'à présent. C'est quelque chose qui m'empêche de continuer avec un tutoriel que je fais.

J'ai écrit un programme très simple pour démontrer mon point comme suit.

main.ccp


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

using namespace std;

int main ()
{

speak();

return 0;
}

Cat.h


#pragma once



void speak();

Cat.ccp


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

using namespace std;

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

}

Ce programme simple se construit dans Codeblocks et Visual Studio Community 2017 sans problème et je ne peux pas comprendre ce que je dois faire pour le faire fonctionner. Cette erreur en bas indique que le fichier Cat.ccp n'est pas récupéré du tout. Si je devais déposer la définition de ce Cat.ccp dans le fichier d'en-tête, le programme se compile et fonctionne correctement, mais je dois utiliser ce fichier .ccp car je comprends que c'est la façon acceptée de séparer le code. Je noterai que tous les fichiers sont également dans le même dossier.

Je comprends que je devrais peut-être dire à VS Code où chercher le fichier Cat.ccp, mais il est étrange pour moi qu'il trouve l'en-tête au même emplacement. Néanmoins, après avoir consulté en ligne, j'ai lu que je devrais peut-être placer un répertoire dans le c_cpp_intellisense_properties.json. Voici à quoi ressemble la mienne.

{
"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
}

À un moment donné, je me suis demandé si je devais ajouter une double commande pour indiquer au compilateur de créer les deux fichiers .ccp dans le tasks.json mais je n'ai pas réussi à comprendre comment le faire , ou même si c'est la bonne approche.

tasks.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"
    }
]
}

Appréciez toute aide. Et juste au cas où vous vous poseriez la question, la raison pour laquelle je ne termine pas seulement le tutoriel dans Codeblocks ou VS Community est que j'aime savoir ce qui se passe sous le capot dans la plupart des choses. De plus, j'aimerais que VS Code fonctionne pour moi, car il a été formidable jusqu'à présent.

9
Danny Hepple

Si vous avez plusieurs fichiers et que l'un dépend d'un fichier cpp pour un autre, vous devez également dire à g ++ de le compiler, afin que l'éditeur de liens puisse le trouver. Le moyen le plus simple serait:

$ g++ Cat.cpp main.cpp -o Classes

En remarque, vous devriez probablement compiler avec des avertissements, au minimum -Wall, probable -Wextra, et éventuellement -Wpedantic, donc vous savez si quelque chose que vous faites est problématique.

1
Jack Zhou
"tasks": [
    {
        "label": "echo",
        "type": "Shell",
        "command": "g++",
        "args":[
            "-g","main.cpp","cat.cpp"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }

Ajoutez simplement cat.cpp dans args puis essayez d'exécuter. Il devrait fonctionner sans erreur sur le code VS

0
Raj Shah

Cela fera-t-il une différence si les extensions de fichier sont ccp ou cpp?

0
DB Baxter

Je me débattais aussi avec cela jusqu'à ce que je trouve la réponse suivante sur https://code.visualstudio.com/docs/cpp/config-mingw :

Vous pouvez modifier votre tasks.json pour créer plusieurs fichiers C++ en utilisant un argument comme "${workspaceFolder}\\*.cpp" au lieu de ${file}. Cela va créer tous les fichiers .cpp dans> votre dossier actuel. Vous pouvez également modifier le nom du fichier de sortie en remplaçant "${fileDirname}\\${fileBasenameNoExtension}.exe "avec un nom de fichier codé en dur (par exemple>" ${workspaceFolder}\\myProgram.exe").

Notez que le F dans workspaceFolder est en majuscule.

À titre d'exemple, dans mon fichier tasks.json de mon projet, le texte entre les crochets sous "args" était à l'origine le suivant:

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

Cela m'a donné des erreurs de référence car il ne compilait qu'un seul et non les deux de mes fichiers.

Cependant, j'ai réussi à faire fonctionner le programme après avoir modifié ce texte comme suit:

"-g",
"${workspaceFolder}\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
0
KBurchfiel

se sentir paresseux,

c'est launch.json de vscode pour les distributions linux

pour compiler plusieurs fichiers 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
        }
    }
]

}

0
kzs