Makefile с несколькими целями - PullRequest
6 голосов
/ 19 августа 2010

Надеюсь, это очень простой вопрос. У меня есть правило шаблона make-файла, которое выглядит так:

%.so : %.f %.pyf
    f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt

Я хочу, чтобы make-файл собирал несколько файлов .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 ]

13 голосов
/ 19 августа 2010

Обычный трюк состоит в том, чтобы добавить «фиктивную» цель как первую, которая зависит от всех целей, которые вы хотите построить при запуске простого make:

all: radgrd_py.so lodiso_py.so

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

.PHONY: all
4 голосов
/ 20 августа 2010

Лучше всего добавить:

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

Пояснения:

make использует первую цель, появляющуюся, когда не указан .DEFAULT.

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

all:, как предложено Schot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...