web-dev-qa-db-ja.com

G ++を使用して複数の.cppおよび.hファイルをコンパイルする

私は、メインと他の多くの関数を含む1つのcppファイルで不完全に書かれたC++コードをいくつか継承しました。クラスとその関数定義を含む.hファイルもあります。

これまで、プログラムはコマンドg++ main.cppを使用してコンパイルされていました。クラスを.hファイルと.cppファイルに分離したので、メイクファイルを使用する必要がありますか、それともg++ main.cppコマンドを使用できますか?

135
Meir

main.cppの後の他のすべてのcppファイルをリストします。

すなわち

g++ main.cpp other.cpp etc.cpp

等々。

または、すべて個別にコンパイルできます。次に、結果の「.o」ファイルをすべてリンクします。

180
Goz

リンクせずに個別にコンパイルするには、-cオプションを追加する必要があります。

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out
42
FredAKA

クラスを.hファイルと.cppファイルに分離したので、メイクファイルを使用する必要がありますか、それとも「g ++ main.cpp」コマンドを使用できますか?

一度に複数のファイルをコンパイルするのは、Makefileに入れようとする場合には適切な選択ではありません。

通常、Makefileでは( GNU/Make の場合)、次のように記述するだけで十分です。

# "all" is name of the default target, running "make" without params would use it
all: executable1

# for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker
CC=$(CXX)

# tell which files should be used, .cpp -> .o make would do automatically
executable1: file1.o file2.o

そうすれば、makeは再コンパイルが必要なものだけを適切に再コンパイルします。また、いくつかの調整を追加してヘッダーファイルの依存関係を生成することもできます。これにより、makeはヘッダーファイルの変更により再構築する必要があるものも適切に再構築します。

20
Dummy00001

必要に応じて、g ++を直接使用できます。

g++ f1.cpp f2.cpp main.cpp

ここで、f1.cppおよびf2.cppは、それらの関数を含むファイルです。 makeを使用してビルドを行う方法の詳細については、優れた GNU make documentation を参照してください。

10
anon

私はこの質問が何年も前に尋ねられたことを知っていますが、それでも私が通常複数のc ++ファイルをコンパイルする方法を共有したかったです。

  1. 5つのcppファイルがあるとします。あなたがしなければならないのは、それぞれのcppファイル名を入力する代わりに*を使用することです(例:g++ -c *.cpp -o myprogram)。
  2. これは"myprogram"を生成します
  3. プログラム./myprogramを実行します

それで全部です!!

*を使用している理由は、30個のcppファイルがある場合、それらすべてを入力するとどうなるかということです。または単に*記号を使用して時間を節約します:)

p.sこの方法は、メイクファイルを気にしない場合にのみ使用してください。

6
zobair

.hファイルはコンパイルとは何の関係もありません... cppファイルのことしか気にしないので... g++ filename1.cpp filename2.cpp main.cpp -o myprogramと入力します

つまり、各cppファイルをコンパイルし、それらをmyprgramにリンクします。

次にプログラムを実行します./myprogram

4
Matthew

複数のg ++​​コマンドを使用してリンクできますが、最も簡単な方法は、Scons(Makefileよりもセットアップが簡単な場合が多い)などの従来のMakefileまたは他のビルドシステムを使用することです。

4
gauteh

以前は現在のディレクトリにあるすべてのファイルをコンパイルしたカスタムMakefileを使用していましたが、必要なすべてのディレクトリに毎回コピーする必要がありました。

そこで、独自のツールを作成しました- niversal Compiler これにより、多くのファイルをコンパイルする際のプロセスがはるかに簡単になりました。

1

rebenvpが言ったように私は使用しました:

g++ *.cpp -o output

そして、出力のためにこれを行います:

./output

しかし、より良い解決策はmakeファイルを使用することです。 makeファイルの詳細については、 here をお読みください。

また、必要な.hファイルを.cppファイルに追加したことを確認してください。

1
Pritam Banerjee