具有多个目标的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 

但是在每种情况下,它只是构build了我指定的第一个目标。 如果我运行“make radgrd_py.so”,它工作正常,我只是不知道如何指定一个需要build立的文件列表,所以我可以运行'make'。

Solutions Collecting From Web of "具有多个目标的Makefile"

通常的技巧是添加一个“虚拟”目标作为第一个依赖于你想要建立的所有目标,当运行一个普通的make

 all: radgrd_py.so lodiso_py.so 

将这个目标称为“全部”或“默认”是一个惯例。 为了获得更多的正确性,请通过将此行添加到您的Makefile来让它们知道这不是一个真正的文件:

 .PHONY: all 

最好的方法是添加:

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

说明:

使用没有指定.DEFAULT时出现的第一个目标。

.PHONY通知目标(实际上是一个彗星分隔的列表)不创建任何文件或文件夹。

all:schot提议