2017-01-22 121 views
0

我的makefile有兩條線路:makefile中的規則順序很重要?

Rule_1

File.o : File.cpp 
    g++ -c File.cpp -o File.o 

Rule_2

File : File.o 
    g++ File.o -o File 

我想在任何File.cpp變化導致兩File.oFile的再生。

Makfile:這是通過

Rule_2 
Rule_1 

但下面不工作,僅再生File.o

Rule_1 
Rule_2 

爲什麼?我注意到,我的makefile中沒有使用任何all:。通過all: File以上兩種方法都可以工作。

回答

2

我假設你的make工具是GNU Make。

除非指定命令行上的目標,如:

make File 

make默認會試圖使第一目標 在makefile,它在你的問題的情況是File.o。 見How make Processes a Makefile

當您添加:

all: File 

上方,all是第一目標,這取決於File, 而這又取決於File.o

我建議你更換與:

.PHONY: all 

all: File 

Phony targets

+0

或者,如果OP(或任何人:))使用FreeBSD的化妝可以使用'.MAIN'目標(見HTTPS:/ /www.freebsd.org/cgi/man.cgi?make(1))。 – uzsolt