2010-08-19 76 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:提议散粒