Substitua uma linha por STDIN em um Makefile

5

Um alvo Makefile deve ser responsável por:

  • pegando a saída de $ perl Markdown.pl src/index.md (markdown to html)
  • usando essa string para substituir uma linha, algo como CONTENT originado no arquivo src / template.html. Não há outra linha com essa linha em template.html.

Qual é a maneira elegante de conseguir isso?

    
por chelmertz 29.01.2012 / 20:24

2 respostas

3

Como o arcege disse, não modifique o arquivo de origem real. De qualquer forma, isso é muito mais fácil com awk :

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

Você pode colocar o código awk em um script se quiser deixar a linha um pouco mais limpa. (Se você fizer isso, altere $$0 para $0 , é necessário porque senão o makefile interpreta isso)

target:
    awk -f convert.awk src/template.html > build/template.html
    
por 29.01.2012 / 21:20
2

Uma regra é que você não modifica arquivos source em uma compilação, portanto, não há modificações no local. Use um diretório 'build' ou algo semelhante.

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

Isso deve cuidar de qualquer situação em que perl Markdown.pl não emita um ponto ('.') por si só.

    
por 29.01.2012 / 20:36

Tags