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すべての行を拡張できるツールはありますか?現在、そのようなツールがない場合は、これを達成するためのスクリプトを作成できますか?makefilebigMakefilepython/perl/awk/bash

答え1

これgetline の GNU Awk マニュアル以下はほぼ完璧な例です。

たとえば、次のプログラムは、を除くすべての入力ファイルを出力にコピーします@include filename。これらのレコードはファイル名ファイルの内容に置き換えられます。

{
     if (NF == 2 && $1 == "@include") {
          while ((getline line < $2) > 0)
               print line
          close($2)
     } else
          print
}

include代わりに一致するように変更してください@include

関連情報