2010-08-19 70 views
6

希望這是一個非常簡單的問題。我有一個makefile模式規則是這樣的:具有多個目標的Makefile

%.so : %.f %.pyf 
    f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

我希望Makefile建設一批.so文件的,所以我試圖把它打造兩個文件(radgrd_py.so和lodiso_py.so)通過這樣做:

radgrd_py.so lodiso_py.so: 

%.so : %.f %.pyf 
f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

,然後嘗試這樣:

radgrd_py.so: 

lodiso_py.so: 

%.so : %.f %.pyf 
f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

但是在每種情況下,它只是建立在我指定的第一個目標。如果我運行'make radgrd_py.so',它可以正常工作,但我不確定如何指定需要構建的文件列表,以便我可以運行'make'。

回答

13

慣用的伎倆是增加一個「虛擬」的目標作爲這取決於你想運行一個普通make時建立的所有目標第一:

all: radgrd_py.so lodiso_py.so 

這是一個約定來調用這個目標的一切'或'默認'。對於額外的正確性,讓make知道這是不是一個真正的文件中加入這一行到您的Makefile

.PHONY: all 
+0

感謝。正是我在找什麼。 – Kazza789 2010-08-20 00:28:44

3

最好的辦法是補充:

.PHONY: all 
.DEFAULT: all 
all: radgrd_py.so lodiso_py.so

說明:

化妝使用當沒有指定.DEFAULT時出現的第一個目標。

.PHONY通知使目標(實際上是一個彗星分隔的列表)不創建任何文件或文件夾。

all:提議散粒