GNU可以禁止一个目标的并行化吗?

时间:2015-04-03 20:25:28

标签: makefile gnu-make

这是我设计的Makefile来说明我的问题:

allinfiles = file1.in file2.in file3.in

alloutfiles = file1.out file2.out file3.out

all: $(alloutfiles)

clean:
        -rm *.pyc *.in *.out > /dev/null 2>&1

# my.py generates file1.in file2.in file3.in
$(allinfiles): my.py; python my.py

%.out: %.in
        cp $< $@

我设计的Python脚本:

#!/usr/bin/env python

for i in 1,2,3:
    filename = 'file{}.in'.format( i )
    f = file( filename, 'wt' )
    f.write( filename )
    f.close()

结果:

$ make clean; make -j 8
python my.py
python my.py
python my.py

问题1:如何编写规则以便my.py仅执行一次,因为它会生成所有.in个文件?

注意:除非我误解,否则我会尝试使用this answer并且无法获得我期望的结果。

问题2:有没有办法按目标记录所有构建输出?也就是说,如果代替$(shell cp $< $@),配方生成了很多输出,我如何按目标或输入文件分隔输出?

0 个答案:

没有答案