私が作成したmakeファイルは、.depend
によって生成されたヘッダファイルが変更された場合、自動検出の簡単な例を表します。gcc -MM -MF
によって生成されます。なぜこのmakeファイルに前提条件 ".depend"を追加する必要はありませんか?
は、次のメイクファイルを考えてみましょう:私たちは、これが正常に動作し、私は理由を知りたいmain.c
とfactorial.h
CC=gcc
CFLAGS=-c -Wall
OBJECTS=main.o
SRCS=main.c
EXECUTABLE=program
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) -o $(EXECUTABLE)
.depend: $(SRCS)
rm -f ./.depend
$(CC) $(CFLAGS) -MM $^ -MF ./.depend;
sinclude .depend
#main.o: main.c factorial.h
clean:
rm -rf *.o $(EXECUTABLE) .depend
を持っています! 常識は、我々はファイル.depend
があることを確認したいので
$(EXECUTABLE): $(OBJECTS) .depend
を書くことです。しかし、省略してもうまく動作するようです。どうして?また、include
(この場合はsinclude
)が実際に何をしているのか知りたいです。私たちの例では、この例ではinclude .depend
は
main.o: main.c factorial.h
に置き換えられますが、やはりワークフローは意味をなさないものです。どんな専門家?
ありがとう余分なステップは必要ありません。あなたがリメイクすると、includeディレクティブのターゲットは、 ".dependをインクルード"すると、 ".depend"という名前のターゲットを探し、その命令を実行することを意味しますか? – Thenewstockton
@Thenewstockton正確には、ファイル自体をインクルードした後でのみ、makefileに自身をリメイクするためのルールを含めることができます。 makeが最初に呼び出されたときに '.depend'が存在しないので、明らかにこれはうまくいきません。 – user657267