2016-10-06 16 views
-4

IDE(ビジュアルスタジオまたはxCode)で作業すると、cppファイル(hファイルのみ)は含まれず、すべてが完全にコンパイルされます。C++ファイルを含むC++

しかし、私がcppファイルをインクルードしないと、cmd/terminal(主に私のラズベリーパイ)でコンパイルすると、コンパイラはcppファイルを読み込まなかったので、多くのエラーをスローします。

なぜですか?どのようにideはcurrect cppファイルをインクルードするのを知っていますか?あなたがIDEか端末経由でコンパイルしているかどうかを調べる方法はありますか?

何かのように:

#ifdef IDE_KEYWORD 
#endif 
+1

詳細情報が必要です。ターミナルでどのようにコンパイルしていますか?どのコンパイラ、どのコマンドを実行しているのかなど – mascoj

+0

プロジェクト/ Makefileに 'C++'ソースファイルを追加しなかったかもしれません... – drescherjm

+3

(既存の回答にはこれが言及されていないため) **いくつかのファイルをコンパイルするために '#include 'を使うべきではありません。 IDEはどちらもそれをしません。あなたのソースファイルを管理する他の方法がありますが、 '#include'はそうではありません。 – anatolyg

答えて

0

のIDEは、プロジェクト/ワークスペースとどのようなものではありませんであるかのファイルを追跡します。たとえば、Visual Studioは、このような

あなたのプリプロセッサ定義に IDE_KEYWORDを追加するだけである必要がありますが、IDEを使用しているかどうかを判断するためのifdefを持つ
<ClCompile Include="yourFile.cpp" /> 

など、すべてのコンパイル単位を格納vcxprojファイル内のブロックを持っていますあなたのIDEの中に。そのIDEの外でコンパイルすると、IDE_KEYWORDは定義されません。

0

私は方法がないと仮定していない場合、あなたは

#ifdef _MSC_VER 
// your code 
#endif 

できるのVisual Studioにある場合。

すべての.cppファイルをコンパイルしていない、またはすべてのオブジェクトファイルをリンクしていないため、エラーが発生することがあります。 すべてのファイルにg ++ g++ -c file.cpp -o file.oを使用してコンパイルする場合。リンクする場合はg++ file1.o file2.o fileN.o -o finalExecutable.exe

これは複雑に見える場合は、Makefilesを見てください。彼らは素晴らしいです!

2

IDEは通常、各ソースファイル(「cppファイル」と記述しているもの)を個別にコンパイルして、それぞれのオブジェクトファイルを生成し、すべてのオブジェクトファイル(および他のライブラリ)をリンクします。 IDEは機械的に、 "プロジェクトファイル"にリストされているソースファイルごとに別々にコンパイラを呼び出してからリンクします。

コマンドラインからコンパイルするときは、コマンドラインでEVERYソースファイルを指定する必要があります。IDEはこれを手助けしていないため、手動で行う必要があります。

1つのオプションは、すべてのオブジェクトファイルをリンクして実行可能ファイルを生成する別のコマンドを個別にすべてのソースファイルを別々にコンパイルすることです。実際には、これは多かれ少なかれIDEが行うことを模倣します。

2つ目のオプションは、1つのコマンドラインにすべてのソースファイルをリストすることです。コンパイラはそれぞれを順番にコンパイルしてから(指定するコマンドラインオプションに応じて)オブジェクトファイルをリンクします。

関連する問題