2016-11-09 9 views
0

この質問には以前に尋ねられた場合は謝り、調査し、適切な回答を見つけることができませんでした。複数のファイルを1つのルールで生成する - Makefile

私はmakeを使用してコンパイルする必要があるC++プロジェクトを持っています。

私が必要とする出力は、1つのmakeファイルを使用する3つの異なる実行可能ファイルですが、パターンルールを使用してコンパイルする必要があります。

プロジェクトは、実行可能ファイルごとに3つのソースファイルで構成され、すべてがオブジェクトファイルにコンパイルされたヘッダーファイルの関数を使用します。

は、私はそれらすべてをコンパイルするために管理しますが、各ファイル

一つのルールの例については、別々のルールを使用しています

file1: file1.cpp header.o header.h 
     g++ $(FLAGS) file1.cpp header.o -o file1 

感謝。

編集:

file1: file1.cpp header.o header.h 
    g++ $(FLAGS) file1.cpp header.o -o file1 

file2: file2.cpp header.o header.h 
    g++ $(FLAGS) file2.cpp header.o -o file2 

file3: file3.cpp header.o header.h 
    g++ $(FLAGS) file3.cpp header.o -o file3 

これらは、実行可能

header.o: header.cpp header.h 
     g++ $(FLAGS) -c header.cpp -o header.o 

されており、これは機能を持つオブジェクトファイル

FLAGS変数はヘッダファイルが格納されているディレクトリが含まれています。

+0

を動作するはずですあなたがする必要があるすべては、あなたの変数とルールの正しい形式を使用する以下で、コンパイルとリンクするためのbuilt-in rulesを持っています'と' header.h'?最初にヘッダを別々にコンパイルするのはなぜですか?いずれの場合でも 'file1:file1.cpp'パターンが実行可能ファイルごとに保持されている場合は、[mcve]を発行して単一のレシピは必要ありません。 – user657267

+0

こんにちは、私はメインのポストを編集し、私が持っているすべてのコードが含まれています。ヘッダーファイルをオブジェクトコードにコンパイルして、各実行可能ファイルにリンクします。 – Joe

+0

それでもまだmcveではなく、 'FLAGS'は何に設定されていますか?私が 'header.o'と述べたのは、ヘッダーを別々にコンパイルしないことです。(あなたがここにないプリコンパイルされたヘッダーのようなものを使用する場合を除いて)、他の翻訳単位で' include'dされます。 – user657267

答えて

1

メイクは `file1`は` header.oの両方に依存しないのはなぜ

targets := file1 file2 file3 
CPPFLAGS := -Isome_include_dir 

.PHONY: all 
all: $(targets) 
$(targets): CC := $(CXX) 
$(targets): %: %.o header.o 
%.o: header.h 
+0

はい!これは私の問題を解決しました。私はこれを使用することを考えていたが、どのように、私は今働いているか分からなかった。ありがとう。私は新しいユーザーであるので、あなたに+1を与えることができるかどうかがわかります。そうでなければ、私はごめんなさい。再度、感謝します! – Joe

関連する問題