具有多个目标的Makefile

时间:2010-08-19 07:24:35

标签: linux shell 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'。

2 个答案:

答案 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 目标(实际上是以逗号分隔的列表)不会创建任何文件或文件夹。

schot

提出的

all: