希望这是一个非常简单的问题。 我有一个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'。
通常的技巧是添加一个“虚拟”目标作为第一个依赖于你想要建立的所有目标,当运行一个普通的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提议