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. 이러한 레코드는 filename 파일의 내용으로 대체됩니다.

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

include대신에 일치하도록 수정하면 됩니다 @include.

관련 정보