2010-08-19 4 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 

Этим соглашение назвать эту цель «всем 'или' default '. Для дополнительной правильности, пусть make знает, что это не реальный файл, добавив следующую строку в Makefile:

.PHONY: all 
+0

Спасибо. Именно то, что я искал. – Kazza789

3

Лучшего способ заключается в добавлении:

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

Пояснение:

макияжа использует первую цель, появляющуюся при отсутствии .DEFAULT.

.PHONY информирует , что указывает, что цели (на самом деле разделенные запятыми) не создают никакого файла или папки.

all:, предложенный Schot

Смежные вопросы