假设我们有以下内容Makefile
include config.mk
# Generate summary table.
results.txt : $(ZIPF_SRC) isles.dat abyss.dat last.dat
$(ZIPF_EXE) *.dat > $@
# Count words.
.PHONY : dats
dats : isles.dat abyss.dat last.dat
%.dat : books/%.txt $(COUNT_SRC)
$(COUNT_EXE) $< $*.dat
.PHONY : clean
clean :
rm -f *.dat
rm -f results.txt
其中所有变量都定义在config.mk
LANGUAGE=python
COUNT_SRC=countwords.py
COUNT_EXE=$(LANGUAGE) $(COUNT_SRC)
ZIPF_SRC=testzipf.py
ZIPF_EXE=$(LANGUAGE) $(ZIPF_SRC)
是否有任何工具可以扩展include
中的所有行makefile
以生成bigMakefile
?如果目前不存在这样的工具,是否可以python/perl/awk/bash
编写一个脚本来实现此目标?
答案1
这GNU Awk 手册中有关 getline 的部分有一个近乎完美的例子:
例如,以下程序将所有输入文件复制到输出,除了
@include filename
.这样的记录被文件 filename 的内容替换:{ if (NF == 2 && $1 == "@include") { while ((getline line < $2) > 0) print line close($2) } else print }
您只需修改它以匹配include
而不是@include
.