将 make 后面的参数传递给生成文件中的变量



我有一段makefile可以从.tex生成.pdf.ps.dvi

...
$(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)

这里有几个选项,具体取决于您想要的行为。(而且我不确定我是否完全理解你的命令 - 我认为没有任何理由将其作为一条包装线 - 但没关系。

如果希望仅允许事先已知的列表中的目标:

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 完全中止,我认为这是可能的,但我必须再考虑一下......

这不是

make的工作方式。 也许您想使用一个 shell 脚本来接受参数,验证它,并使用您的 Makefile 调用make,将文件作为make变量传入;也就是说,类似

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

最新更新