Makefile 대상은 다음을 담당해야 합니다.
$ perl Markdown.pl src/index.md
가져오기(html로 마크다운) 출력CONTENT
src/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
이는 마침표(".")를 표시하지 않는 모든 경우를 고려해야 합니다 .