3 Stimmen

Senden von Parametern an make (Linux oder andere *nix-Variante)

Siehe den nachstehenden Code: Wie kann ich einen Parameter senden? BASE_NAME = myfile in die Befehlszeile eingeben, ohne BASE_NAME . Ich möchte nur eingeben

$make pdf myfile

BASE_NAME = myfile

LATEX     = latex
PDFLATEX  = pdflatex
BIBTEX    = bibtex
MAKEINDEX = makeindex
DVIPS     = dvips
PS2PDF    = ps2pdf

pdf: $(BASE_NAME).pdf
ps: $(BASE_NAME).ps

$(BASE_NAME).ps: $(BASE_NAME).tex 
    $(LATEX) $<
    $(BIBTEX) $(BASE_NAME) 
    $(LATEX) $< 
    $(LATEX) $<
    $(DVIPS) -Ppdf $(BASE_NAME)

$(BASE_NAME).pdf: $(BASE_NAME).tex
    $(PDFLATEX) $<

clean:
    rm -f $(BASE_NAME)*.ps $(BASE_NAME)*.dvi *.log \
          *.aux *.blg *.toc \
          missfont.log $(BASE_NAME)*.bbl $(BASE_NAME)*.out \
          $(BASE_NAME)*.lof $(BASE_NAME)*.lot

open:
    acroread $(BASE_NAME).pdf

Und wie verwende ich einen Optionstyp

$make pdf -o myfile

um die PDF-Datei zu erstellen, und öffnen Sie sie dann über die Option -o ?

2voto

Boris Punkte 271

Dies ist keine Frage zu TeX per se, aber trotzdem...

Sie sind viel besser, wenn Sie allgemeine Regeln statt spezifischer Regeln angeben. Außerdem, wenn Sie Ihre Dateien öffnen wollen, Makefile Die Konventionen legen den Befehl make open statt make -o .

Normalerweise mache ich das so

# The only thing that changes!
TEXFILES = firstfile.tex secondfile.tex  

PDFS = ${TEXFILES:%.tex=%.pdf}

all: $(PDFS)

open: all
    for x in ${PDFS}; do (xpdf $$x &); done

# You can write a similar rule for ps...
%.pdf: %.tex  
    pdflatex $*
    -bibtex $*
    pdflatex $*
    - while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log || \
    grep -q '^Package natbib Warning: Citation(s) may have changed' $*.log ) \
    do pdflatex $*; done

clean:
   $(RM) *.aux *.bbl *.dvi *.log *.out *.toc *.blg *.lof *.lot

distclean: clean
       $(RM) $(PDFS)

1voto

uzsolt Punkte 5410

Ich denke, Sie sollten Ihre Makefile wie Boris schrieb:

%.pdf: %.tex
     pdflatex $<

Nachdem Sie die make myfile.pdf o make foo.pdf oder etwas anderes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X