希望这是一个非常简单的问题。我有一个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'。
答案 0 :(得分:13)
通常的技巧是在运行普通make
时添加一个'虚拟'目标作为第一个依赖于你想要构建的目标的目标:
all: radgrd_py.so lodiso_py.so
将此目标称为“全部”或“默认”是一种惯例。为了更加正确,让make
通过将此行添加到Makefile
来知道这不是真实文件:
.PHONY: all
答案 1 :(得分:4)
最好的方法是添加:
.PHONY: all
.DEFAULT: all
all: radgrd_py.so lodiso_py.so
说明:
make 使用未指定.DEFAULT
时出现的第一个目标。
.PHONY
通知 make 目标(实际上是以逗号分隔的列表)不会创建任何文件或文件夹。
all: