2012-01-11 8 views
12

¿Es posible decir make para construir solo un objetivo si sus orígenes md5 ha cambiado la suma de comprobación (en lugar del tiempo de edición)?Marca: solo crea algo si se modificó la suma de comprobación md5 de la fuente

Estoy usando make para compilar mis archivos .tex y necesito evitar que construya todo dos veces todo el tiempo.

He intentado usar Scons, pero creo que esto no es adaptable a otras necesidades que tengo.

+0

estaba resolviendo recientemente un problema similar con los archivos make generada usando CMake, ver http://stackoverflow.com/questions/36600111/how-do-cmake-detect-changed-files. –

Respuesta

4

No, esto no es compatible con Make - como descubrimos, la compatibilidad con this feature es uno de los motivos por los que existen herramientas como Scons.

Encontré un manual recipe para GNU make, though. Tal vez puedas usar eso como un trabajo alternativo.

+0

el problema con los bollos es principalmente que sería el único en mi entorno que usaba eso. Nadie que conozca lo usa, me gustaría mucho más para algunos pirateo de archivos (¿usando algunas declaraciones if quizás?). – romeovs

+1

Me gustaría ir con Scons independientemente, es un buen sistema. Si solo es para compilar un documento LaTeX, entonces usaría algo como [latex-mk] (http://latex-mk.sourceforge.net/). –

+0

sí, acabo de encontrar una solución usando latexmk. Gracias por la propina de bollos. Me pondré al día cuando sea el momento adecuado. – romeovs

1

Tal vez mi látex scons y la receta org-mode le ayuda a:

## I need a couple of special builders for my projects 
# the $SOURCE replacement only uses the first source file. $SOURCES gives all. 
# specifying all source files makes it possible to rerun the build if a single source file changed. 
orgexportpdf = 'emacs --batch --visit "$SOURCE" --funcall org-export-as-pdf' 
pyxplot = 'pyxplot $SOURCE' 
# pdflatex is quite dirty. I directly clean up after it with rm. 
pdflatex = 'pdflatex $SOURCE -o $TARGET; rm -f *_flymake* flymake* *.log *.out *.toc *.aux *.snm *.nav *.vrb' 

# build the PhD thesis from emacs org-mode. 
Command("doktorarbeit.pdf", "doktorarbeit.org", 
     orgexportpdf) 

# create plots 
Command(["images/comp-t3-s07-tem-boas.png", 
     "images/comp-t3-s07-tem-bona.png"], 
     ["nee-comp.pyx", 
     "nee-comp.txt"], 
     pyxplot) 

# build my sink.pdf 
Command("sink.pdf", 
     ["sink.tex", 
     "images/comp-t3-s07-tem-boas.png", 
     "images/comp-t3-s07-tem-bona.png", 
     "images/bona-marble.png", 
     "images/boas-marble.png"], 
     pdflatex) 

# My editors leave tempfiles around. I want them gone after a build clean. This is not yet supported! 
tempfiles = Glob('*~') + Glob('#*#') + Glob('*.bak') 
# using this here would run the cleaning on every run. 
#Command("clean", [], Delete(tempfiles)) 

Es la contraparte para mi Makefile:

all: doktorarbeit.pdf sink.pdf 

sink.pdf : sink.tex images/comp-t3-s07-tem-boas.png images/comp-t3-s07-tem-bona.png images/bona-marble.png images/boas-marble.png 
    pdflatex sink.tex 
    rm -f *_flymake* flymake* *.log *.out *.toc *.aux *.snm *.nav *.vrb # kill litter 

comp-t3-s07-tem-boas.png comp-t3-s07-tem-bona.png : nee-comp.pyx nee-comp.txt 
    pyxplot nee-comp.pyx 

# http://www.reddit.com/r/emacs/comments/dy9yt/anyone_know_of_a_script_that_i_can_feed_an/ 
# http://blog.nguyenvq.com/2010/10/30/bash-batch-script-to-convert-org-mode-file-to-html/comment-page-1/#comment-27013 
doktorarbeit.pdf : doktorarbeit.org 
    emacs --batch --visit "doktorarbeit.org" --funcall org-export-as-pdf 

# this is not what clean is intended to do, but I do it anyway. 
clean : 
    rm -f \#* *~ *.bak # kill editor backups 

# alternatively run scons. Should I switch to SCons, just put this in all :) 
sconsrun : scons 
    python scons/bootstrap.py -Q 

scons : 
    hg clone https://bitbucket.org/ArneBab/scons 
Cuestiones relacionadas