这是我设计的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 $< $@)
,配方生成了很多输出,我如何按目标或输入文件分隔输出?