2011-10-06 22 views
0

我在Makefile中有這樣的:的Makefile:運行二進制文件不同,這取決於他們的名字

BINS = $(shell echo *.bin) 

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

*.bin: 
    ./[email protected] 

我運行它make -j 8

這樣它看起來與.bin文件結尾的所有文件,並運行它們在使用make的-j選項(Makefile run processes in background

平行我需要修改Makefile,使其運行類型MPI * .bin文件作爲mpirun -np 2 ./mpi*.bin的所有文件,剩下的可執行文件爲./<filename>.bin

感謝您的幫助。

回答

1

舉個簡單的例子,我用來測試我的回答:根據你的

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: " ./[email protected] 

mpi*.bin: 
    echo "mpi file: " ./[email protected] 

正是在這裏,關鍵前綴文件規則遵循未加前綴的規則。如果不是,則前綴規則將被覆蓋。

這似乎爲前綴和不帶前綴的文件之間進行區分的工作,但給出了以下的輸出:

~/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 

我敢肯定,有抑制這些警告的方式或做的更好,但這種方法似乎有效。

相關問題