Makefile: запускать двоичные файлы по-разному в зависимости от их имени - PullRequest
0 голосов
/ 06 октября 2011

У меня есть это в моем Makefile:

BINS = $(shell echo *.bin)

.PHONY: $(BINS)
run: $(BINS)

*.bin:
    ./$@

Я запускаю его как make -j 8

Таким образом, он ищет все файлы, оканчивающиеся на .bin, и запускает их параллельно, используя параметр make -j ( Makefile запускает процессы в фоновом режиме )

Мне нужно изменить make-файл, чтобы он запускал все файлы типа mpi * .bin как mpirun -np 2 ./mpi*.bin, а остальные исполняемые файлы как ./<filename>.bin

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 06 октября 2011

Вот простой пример, который я использовал для проверки своего ответа:

touch {a,b,c,d}.bin mpi{a,b,c,d}.bin

, чтобы создать несколько пустых тестовых файлов, и мой Makefile, основанный на вашем:

BINS = $(shell echo *.bin)

.PHONY: $(BINS)
run: $(BINS)

*.bin:
    echo "bin file: " ./$@

mpi*.bin:
    echo "mpi file: " ./$@

Это ключздесь правило для файлов с префиксом следует правилу без префикса.В противном случае правило с префиксом будет переопределено.

Похоже, это работает для различения файлов с префиксом и без префикса, но дает следующий вывод:

~/tmp$ make
Makefile:10: warning: overriding commands for target `mpia.bin'
Makefile:7: warning: ignoring old commands for target `mpia.bin'
Makefile:10: warning: overriding commands for target `mpib.bin'
Makefile:7: warning: ignoring old commands for target `mpib.bin'
Makefile:10: warning: overriding commands for target `mpic.bin'
Makefile:7: warning: ignoring old commands for target `mpic.bin'
Makefile:10: warning: overriding commands for target `mpid.bin'
Makefile:7: warning: ignoring old commands for target `mpid.bin'
echo "bin file: " ./a.bin
bin file:  ./a.bin
echo "bin file: " ./b.bin
bin file:  ./b.bin
echo "bin file: " ./c.bin
bin file:  ./c.bin
echo "bin file: " ./d.bin
bin file:  ./d.bin
echo "mpi file: " ./mpia.bin
mpi file:  ./mpia.bin
echo "mpi file: " ./mpib.bin
mpi file:  ./mpib.bin
echo "mpi file: " ./mpic.bin
mpi file:  ./mpic.bin
echo "mpi file: " ./mpid.bin
mpi file:  ./mpid.bin

Я уверенчто есть способ подавить эти предупреждения или сделать это лучше, но этот подход, похоже, работает.

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