0

我有一块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)

4

2 回答 2

0

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

make -f tex.mk FILE="$validated_filename"
于 2012-04-25T21:49:25.957 回答
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 完全中止,我认为这是可能的,但我必须再考虑一下......

于 2012-04-25T23:15:58.210 回答