将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