如何编写makefile?

时间:2013-11-19 20:56:22

标签: makefile

我刚刚发现可以从makefile启动LaTeX编译。我之所以需要生成一系列具有一些参数变化的目标。 我的文件在底部。如何使用不同的可选参数添加其他编译作业。换句话说,当有多个目标文件时,如何更改目标文件的名称?

MyFileNew.pdf : MyFile.tex
    pdflatex "\def\UseOption{nonumber,nographics,e} \input{MyFile.tex}"

#makefile
MyFile.pdf : MyFile.tex
    pdflatex "\def\UseOption{number,graphics,ef} \input{MyFile.tex}"\
    pdflatex "\def\UseOption{number,graphics,ef} \input{MyFile.tex}"

    @echo «Removing auxilliary LaTeX files resulting from compilation»
    @rm -f *.log *.aux *.dvi *.toc *.lot *.lof
#end of makefile

3 个答案:

答案 0 :(得分:0)

您是否正在寻找类似的东西?

pdflatex := pdflatex "\def\UseOption{$(options_$*)} \input{$<}"
cleanup := rm -f *.log *.aux *.dvi *.toc *.lot *.lof

options_MyFileNew := nonumber,nographics,e
options_MyFile := number,graphics,ef

MyFileNew.pdf MyFile.pdf: %.pdf: MyFile.tex
    $(pdflatex)
    $(pdflatex)
    $(cleanup)

这基本上只是对你已有的重构。

答案 1 :(得分:0)

以下工作最终符合预期(清除辅助文件除外)。

生成文件

.PHONY: all clean clean-all
all : TargetFile1.pdf TargetFile2.pdf

TargetFile1.pdf : MyFile.tex
    pdflatex --jobname=$(@:.pdf=) "\def\UseOption{number,nographics,e} \input{MyFile.tex}"

TargetFile2.pdf : MyFile.tex
    pdflatex --jobname=$(@:.pdf=) "\def\UseOption{number,nographics,ef} \input{MyFile.tex}"

clean :
    rm -f *.log *.aux *.dvi *.toc *.lof

clean-all : clean
    rm -fr *.pdf
# Makefile

答案 2 :(得分:0)

简单的make文件
all: main.o module.o                    \\ The dependencies of the target all   \
    gcc main.o module.o -o target_bin   \\ The action to make the target all    \
main.o: main.c module.h                 \\ The dependencies fo the target main.o    \
    gcc -I . -c main.c                  \\ The action to make the target main.o ,\
module.o: module.c module.h                                                     \
    gcc -I . -c module.c                \\ -I tells the compiler header file locations  \
clean:                                  \\ This target has no dependencies                      \
    rm -rf *.o                                                  \
    rm target_bin

回答这个问题需要一个相对较长的解释和一个用于演示的多个文件,我在一个github回购中包含一个HERE a link,它以紧凑的方式回答这个问题(有足够的细节)。