Надеюсь, это очень простой вопрос. У меня есть правило шаблона 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'.
Обычный трюк - добавить «фиктивную» цель в качестве первой это зависит от всех целей, которые вы хотите построить при запуске простой make
:
all: radgrd_py.so lodiso_py.so
Это соглашение называется «все» или «по умолчанию». Для большей корректности сообщите make
, что это не настоящий файл, добавив эту строку в свой Makefile
:
.PHONY: all
Лучше всего добавить:
.PHONY: all
.DEFAULT: all
all: radgrd_py.so lodiso_py.so
Пояснения:
make использует первую цель, появляющуюся, когда не указано .DEFAULT
.
.PHONY
сообщает make , что цели (на самом деле список, разделенный запятыми) не создают никаких файлов или папок.
all:
как предложено schot