我有一块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
。另外,我不想允许make
或make all
作为命令,没有指定文件名。
有人能告诉我如何将make
之后的第一个参数传递给$(FILE)
吗?
答案 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完全中止,我认为这是可能的,但我不得不考虑更多......