0

C メイクファイル

この質問には重複がありますが、まだ問題を解決できません。

次の Makefile があります。

CFLAGS0 = 
CFLAGS1 = -O1
CFLAGS2 = -O2
CFLAGS3 = -O3
CFLAGS4 = -O4

mountain:   timer.o mountain.o
    gcc -o mountain timer.o mountain.o

timer.o: timer.c timer.h
    gcc -c -O2 timer.c       

mountain.o: mountain.c timer.h
    gcc -c $(CFLAGS1) mountain.c   #I'm trying to make changes here

clean:
    rm *.o mountain

フラグを変更して、さまざまな最適化レベルでコンパイルしようとしています。しかし、作ろうとすると、「山」が最新だと言われますか?私は何が欠けていますか?ありがとう。

4

1 に答える 1

3

makefile は、各レシピのソースの変更時間を調べて、変更する必要があるかどうかを判断します。メイクファイル自体を変更している場合は、気付かれません。ただし、レシピごとに次のように指示できます。

mountain.o: mountain.c timer.h Makefile
    gcc -c $(CFLAGS1) mountain.c

明らかに、メイクファイルの名前が異なる場合は、一致するように変更する必要があります。

また、GNU Make を使用している場合は、特定のレシピを常に時代遅れと見なすように指示できます。ただし、make の主要な最適化が削除されるため、これは避ける必要があります。

.phony : mountain.o
mountain.o: mountain.c timer.h
    gcc -c $(CFLAGS1) mountain.c

これは、 などの抽象的なルールを対象としていcleanます。

于 2013-03-24T00:56:24.113 に答える