Esta é a primeira vez que uso o GNU make para tentar fazer algo um pouco menos básico. Eu gostaria que o alvo padrão de um Makefile fosse procurar por qualquer um dos vários nomes de arquivos correspondentes, um esquema de nomenclatura para o que eu considero serem arquivos de raiz do tex, expressos assim:
#!/usr/bin/env bash
# this is just a sketch, I know this is inaccurate
# and simplified by make's standard...
# mainfiles := main letter report course
mainfiles=(main letter report course)
_readable(){
if ([ -f "$1" ] && [ -r "$1" ]); then
return 0
fi
return 1
}
# how to make all of these existing targets using GNU make?
# all: $(patsubst %, %.tex, $$(mainfiles))
all() {
for base in $mainfiles[@]; do
if _readable "${base}.tex"; then
latexmk -pdfxe "${base}.tex"
fi
done
}
# clean:
# latexmk -c
clean(){
latexmk -c
}
Não sei como transformar isso em um makefile.
edit:
@ G-Man apontou que minha pergunta não era clara na melhor das hipóteses. De fato, eu estava com pressa e não sei exatamente o que quero. Eu acho que quero ser preguiçoso, e usar :make
em vez dos plugins autocompile fantasia do vim.
O ponto é que eu costumava editar uma variável
JOBNAME
em um Makefile genérico que depende do latexmk para todos os meus projetos tex (la | xe | lua). Quando eu abro um dos arquivos não existentes main.tex letter.tex course.tex etc no vim, eu faço com que ele ative um autocommand para ler em um arquivo de esqueleto correspondente, copie sobre meu Makefile genérico e execute
git init
se não houver
.git
pasta. Normalmente eu tenho apenas um desses arquivos
.tex
em uma pasta, mas pode haver mais deles.
Eu quero um makefile por causa de uma etapa de pré-compilação (usando mylatexformat ), alguns comandos de limpeza mais granulares e algo parecido com um FILTER = 2>&1 | sed -n '/^\(Running\|Package\|Beginning\|Underfull\)/p;/^! /,$$p'
que eu posso acrescentar aos comandos do compilador. A etapa de pré-compilação, por exemplo, verifica @if ((
grep -c endofdump $ (TMP) / $ (JOBNAME) .tex == 1 )); then ...
.
Minha pergunta deve ser entendida em uma tentativa preguiçosa de evitar ter que especificar JOBNAME
, de modo que qualquer um dos arquivos main.tex letter.tex course.tex etc sejam tratados com as mesmas dependências, possivelmente um rsync e um etapa de pré-compilação que executa verificações e uma etapa de compilação que requer que $JOBNAME.pdf
seja feita.
Eu uso chaves em ${mainfiles[@]}
para o que eu acho que é uma boa prática. Eu incluí o teste -f
e -r
porque eu suponho que faça verificações também.
De qualquer forma, a resposta do @hom foi útil, mas eu revisitei meu uso do make, pois acho que continua sendo uma escolha melhor apenas editar JOBNAME
por causa da flexibilidade e uso futuro. Agora mudo-o com o poder do vim (consulte meu repositório do vim no github )