2016-10-15 5 views
0

私は次のメイクファイルで少しプロジェクトがあるとします。 o-ファイル(2つの依存関係 - .cppと.hpp)の世代に注意してください。make:2つの依存関係が必要ですが、1つしか存在しません。

LIB_OPTS = -lpthread 
CPP_OPTS = -std=c++11 -Wall 

all: main 
    ${CXX} ${CPP_OPTS} ${LIB_OPTS} *.o -o main 

main: a.o b.o c.o main.o 

%.o: %.cpp %.hpp 
    ${CXX} ${CPP_OPTS} ${LIB_OPTS} -g -c $< -o [email protected] 

clean: 
    rm *.o 

a、bおよびcにはcppとhpp-filesがあります。

メインには.cppしかありません。

ここに出力があります。

g++ -std=c++11 -Wall -lpthread -g -c a.cpp -o a.o 
g++ -std=c++11 -Wall -lpthread -g -c b.cpp -o b.o 
g++ -std=c++11 -Wall -lpthread -g -c c.cpp -o c.o 
g++ -c -o main.o main.cpp 
g++ -std=c++11 -Wall -lpthread *.o -o main 

main.oの生成についてはどうですか?

どこから来たのですか?私のルールに関係ないことです。

私がmain.hppを持っていれば、それは私のルールをキャッチします。 もちろん、main.oのための別のルールを作ることができますが、%.oがそれを作ることを期待しました。

ありがとうございました! Chris

答えて

2

GNU makeにはいくつかの組み込みルールがあります。その中には.cppファイルから.oファイルを作成する方法を知っているルールがあります。あなたのルールのどれもmain.oを作成することができないので、makeはそれ自身の組み込みルールを調べて、使用できるルールを見つけます。

次のようなコマンドを使用して組み込みのルールの完全なリストを表示することができます:あなたはそれがmake -rと独自の組み込みのルールのいずれかを使用していないことをmakeを実行することができます

make -pf/dev/null 

関連する問題