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

将make后面的参数传递给makefile中的变量,makefile,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 $(F

我有一个
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
后面的第一个参数。例如,
makepaper
编译
paper.tex
并生成
paper.pdf
。另外,我不想允许
make
makeall
作为命令,其中没有指定文件名


谁能告诉我如何将
make
后面的第一个参数传递给
$(文件)

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

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

这里有几个选项,具体取决于您想要的行为。(我不确定我是否完全理解您的命令——我不认为有任何理由把它作为一个包装行——但没关系。)

如果要仅允许预先知道的列表中的目标,请执行以下操作:

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

现在了解如何处理不需要的目标。如果警告足够:


如果您想完全中止,我认为这是可能的,但我必须再考虑一下……

如果您想生成
all.pdf
FILES = scissors paper rock

$(FILES): % : %.tex $(SRC) $(DEPS)
    latex $*.tex && \
    ...
% : %.tex $(SRC) $(DEPS)
    latex $*.tex && \
    ...
all:
    @echo $@ is not a valid target

(real rule)

%:
    @echo $@ is not a valid target