可以扩展 makefile 中所有“include”指令的工具/脚本

可以扩展 makefile 中所有“include”指令的工具/脚本

假设我们有以下内容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.

相关内容