0

ヘッダーの変更を追跡して、ディレクトリ内にmakeすべてを構築したいと考えています。最初にgcc出力をオプション付きの依存関係を持つターゲットにしてから、実際にコンパイルを呼び出すそのターゲットに本体を追加する.cppことでそれを試みます:-MM

OPTIONS = -std=c++11 -Wall

export

all : $(patsubst %.cpp, %.o, $(wildcard *.cpp))


%.o : %.mkt
    make -f $*.mkt

%.mkt : %.cpp
    gcc $(OPTIONS) -MM $*.cpp > $&.mkt1
    echo gcc $(OPTIONS) -c %.cpp > $*.mkt2
    cat $*.mkt1 $*.mkt2 > $*.mkt

しかし、どういうわけか、このスクリプトはフォームの呼び出しを発行します

g++ -c -o something.o something.cpp

.cppディレクトリ内の各ファイルに対して。一時ファイル.mkt1.mkt2および.mktは作成されません。なぜこれが起こるのですか?望ましい動作を達成するにはどうすればよいですか? 私はmingwを使用してWindowsでこれを行っています。

4

1 に答える 1

2

2つのパターンルールのチェーン(%.cpp-> %.mkt%.mkt-> )を提供しましたが、Makeには、ビルドする方法を検索するときに最初に見つかる%.o単一の暗黙のルール(%.cpp-> )がすでにあります。%.osomething.o

この問題を解決する最も簡単な方法は、組み込みの暗黙のルールを無効にするmake -r(または)を使用することです。make --no-builtin-rules

于 2012-08-13T13:39:24.710 に答える