Ubuntu 17.10でVS Codeを使用し、GCCコンパイラを使用していることに注意してください。
追加の.ccpファイルを利用する簡単なプログラムを作成するのに問題があります。私はプログラミングにかなり慣れていないので、おそらくここで明らかな何かを見逃しているでしょうが、これまでに行ったことを説明します。これは、私がしているチュートリアルを続けるのを妨げているものです。
私は自分の要点を実証するために次のように非常に簡単なプログラムを書きました。
#include <iostream>
#include "Cat.h"
using namespace std;
int main ()
{
speak();
return 0;
}
#pragma once
void speak();
#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ファイルをビルドするように指示するために、そこにダブルコマンドを追加する必要があるかどうか疑問に思いましたが、その方法を理解できませんでした、またはそれが正しいアプローチであっても。
{
// 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を機能させたいと思います。
複数のファイルがあり、1つが別のファイルのcpp
ファイルに依存している場合は、g ++にもファイルをコンパイルするように指示して、リンカーが検出できるようにする必要があります。最も簡単な方法は次のとおりです。
$ g++ Cat.cpp main.cpp -o Classes
余談ですが、少なくとも警告付きでコンパイルする必要があります。少なくとも-Wall
、おそらく-Wextra
、そしておそらく-Wpedantic
、それであなたはあなたがしている何かが問題があるかどうか知っています。
"tasks": [
{
"label": "echo",
"type": "Shell",
"command": "g++",
"args":[
"-g","main.cpp","cat.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
}
Argsにcat.cppを追加して、実行してみます。 VSコードでエラーなしで実行されるはずです
ファイル拡張子がccpまたはcppの場合、違いはありますか?
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"
怠惰な感じ、
これは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
}
}
]
}