将make后面的参数传递给makefile中的变量

时间:2012-04-25 21:44:59

标签: makefile

我有一块makefile.pdf生成.ps.dvi.tex

...
$(FILE).pdf: $(FILE).tex $(SRC) $(DEPS)
    latex $(FILE).tex && \
    bibtex --min-crossrefs=500 $(FILE) && \
    latex $(FILE).tex && \
    latex $(FILE).tex && \
    dvips $(FILE).dvi -o $(FILE).ps && \
    ps2pdf $(FILE).ps $(FILE).pdf
...

我想直接从命令行获取$(FILE),作为make之后的第一个参数。例如,make paper编译paper.tex并生成paper.pdf。另外,我不想允许makemake all作为命令,没有指定文件名。

有人能告诉我如何将make之后的第一个参数传递给$(FILE)吗?

2 个答案:

答案 0 :(得分:0)

这不是make的工作原理。也许你想使用一个shell脚本,它接受一个参数,验证它,并用你的Makefile调用make,将文件作为make变量传递;就像是

make -f tex.mk FILE="$validated_filename"

答案 1 :(得分:0)

这里有几个选项,具体取决于您想要的行为。 (而且我不确定我完全理解你的命令 - 我认为没有任何理由将它作为一条包裹线 - 但从不介意。)

如果您只想允许事先知道的列表中的目标:

FILES = scissors paper rock

$(FILES): % : %.tex $(SRC) $(DEPS)
    latex $*.tex && \
    ...

如果您只想允许存在.tex个文件的目标:

% : %.tex $(SRC) $(DEPS)
    latex $*.tex && \
    ...

现在该怎么做有害目标。 如果警告就足够了:

all:
    @echo $@ is not a valid target

(real rule)

%:
    @echo $@ is not a valid target

如果你想让Make完全中止,我认为这是可能的,但我不得不考虑更多......