web-dev-qa-db-ja.com

VS Codeは複数の.ccpソースファイルを含むC ++プログラムをビルドしません

Ubuntu 17.10でVS Codeを使用し、GCCコンパイラを使用していることに注意してください。

追加の.ccpファイルを利用する簡単なプログラムを作成するのに問題があります。私はプログラミングにかなり慣れていないので、おそらくここで明らかな何かを見逃しているでしょうが、これまでに行ったことを説明します。これは、私がしているチュートリアルを続けるのを妨げているものです。

私は自分の要点を実証するために次のように非常に簡単なプログラムを書きました。

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;

}

この単純なプログラムは、CodeblocksとVisual Studio Community 2017の両方に問題なく組み込まれており、実行するために何をする必要があるのか​​わかりません。下部のこのエラーは、Cat.ccpファイルがまったく取得されていないことを示しています。このCat.ccpの定義をヘッダーファイルにドロップする場合、プログラムは正常にコンパイルおよび実行されますが、これはコードを分離する方法として認められているため、その.ccpファイルを使用する必要があります。すべてのファイルも同じフォルダにあることに注意してください。

Cat.ccpファイルを探す場所をVS Codeに指示する必要があるかもしれませんが、同じ場所でヘッダーを見つけるのは不思議です。それにもかかわらず、オンラインで見た後、ディレクトリをc_cpp_intellisense_properties.jsonに配置する必要がある場合があることを読んでいます。これは私のものです。

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

ある時点で、コンパイラにtasks.jsonで両方の.ccpファイルをビルドするように指示するために、そこにダブルコマンドを追加する必要があるかどうか疑問に思いましたが、その方法を理解できませんでした、またはそれが正しいアプローチであっても。

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

どんな助けにも感謝します。そして、ご参考までに、CodeblocksまたはVS Communityでチュートリアルを終了しないのは、ほとんどの場合、内部で何が行われているのかを知りたいからです。加えて、これまでのところ素晴らしいので、VS Codeを機能させたいと思います。

9
Danny Hepple

複数のファイルがあり、1つが別のファイルのcppファイルに依存している場合は、g ++にもファイルをコンパイルするように指示して、リンカーが検出できるようにする必要があります。最も簡単な方法は次のとおりです。

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

余談ですが、少なくとも警告付きでコンパイルする必要があります。少なくとも-Wall、おそらく-Wextra、そしておそらく-Wpedantic、それであなたはあなたがしている何かが問題があるかどうか知っています。

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

Argsにcat.cppを追加して、実行してみます。 VSコードでエラーなしで実行されるはずです

0
Raj Shah

ファイル拡張子がccpまたはcppの場合、違いはありますか?

0
DB Baxter

https://code.visualstudio.com/docs/cpp/config-mingw で次の回答が見つかるまで、私もこれに苦労していました。

"${workspaceFolder}\\*.cpp"の代わりに${file}のような引数を使用して、tasks.jsonを変更し、複数のC++ファイルをビルドできます。これにより、すべての.cppファイルが現在のフォルダーにビルドされます。 「${fileDirname}\\${fileBasenameNoExtension}.exe」をハードコードされたファイル名に置き換えることにより、出力ファイル名を変更することもできます(例:「${workspaceFolder}\\myProgram.exe")

WorkspaceFolderのFは大文字であることに注意してください。

例として、私のプロジェクトのtasks.jsonファイルでは、 "args"の下の角かっこの間のテキストは、元は次のように表示されていました。

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

これは私のファイルの両方ではなく片方のみをコンパイルするため、参照エラーが発生しました。

しかし、そのテキストを次のように変更した後、プログラムを機能させることができました。

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

怠惰な感じ、

これはLinuxディストリビューション用vscodeのlaunch.jsonです

複数の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