Makefile의 한 줄을 STDIN으로 바꾸기

Makefile의 한 줄을 STDIN으로 바꾸기

Makefile 대상은 다음을 담당해야 합니다.

  • $ perl Markdown.pl src/index.md가져오기(html로 마크다운) 출력
  • CONTENTsrc/template.html 파일에서 생성된 콘텐츠 와 유사한 이 문자열로 줄을 바꿉니다 . template.html에는 이 줄에 대한 다른 줄이 없습니다.

이것을 달성하는 우아한 방법은 무엇입니까?

답변1

arcege가 말했듯이 실제 소스 파일을 수정하지 마십시오. 어쨌든 사용하기가 더 쉽습니다 awk.

target:
    awk '{if($$0=="CONTENT"){system("perl Markdown.pl src/index.md")}else{print}}' src/template.html > build/template.html

이 줄을 더 깔끔하게 보이려면 이 awk 코드를 스크립트에 넣을 수 있습니다. (이렇게 하면 $$0으로 변경하십시오 $0. 그렇지 않으면 makefile이 이를 해석하기 때문에 이것이 필요합니다.)

target:
    awk -f convert.awk src/template.html > build/template.html

답변2

한 가지 규칙은 이렇게 해야 한다는 것입니다아니요조정원천파일이 빌드되므로 내부 수정이 필요하지 않습니다. "빌드" 디렉터리나 이와 유사한 디렉터리를 사용하세요.

template_markdown:
    @mkdir -p build
    cp -p src/template.html build
    (echo /CONTENT/c; perl Markdown.pl src/index.md; echo .; echo w) | ed - build/template.html

perl Markdown.pl이는 마침표(".")를 표시하지 않는 모든 경우를 고려해야 합니다 .

관련 정보