Autoconf / Automake条件和dist规则

时间:2011-08-11 14:24:58

标签: latex makefile autoconf automake

我最近开始使用autoconf和automake来处理我正在进行的项目。该项目的文档是用LaTeX编写的。由于我不希望将LaTeX作为依赖项,因此我想使用autoconf检查 pdflatex 二进制文件是否存在,然后在 Makefile.am 中使用该信息来决定是否只是将 .tex 文件复制到文档目录,或者生成PDF并复制它们。

这是 configure.ac 中的相关部分:

# Check for presence of pdfLaTeX
AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex)
if test -z "$PDFLATEX"; then
  AC_MSG_WARN([Unable to create PDF version of the user manual.])
fi

AM_CONDITIONAL([HAVE_PDFLATEX], test -n "$PDFLATEX")

doc / 目录中,我有以下 Makefile.am

docfiles = manual.tex QuickStart.txt

if HAVE_PDFLATEX
docfiles += manual.pdf
MANNAME = manual
MANTEXSRC = $(MANNAME).tex
MANAUX = $(MANNAME).aux
MANPDF = $(MANNAME).pdf

CLEANFILES = $(MANPDF) $(MANNAME).log $(MANNAME).idx $(MANNAME).out \
 $(MANNAME).toc $(MANAUX)

$(MANPDF): $(srcdir)/$(MANTEXSRC)
    $(PDFLATEX) $<
endif

dist_doc_DATA = $(docfiles)

pdflatex 存在时,此设置有效,但是当 make 无法运行时, make distcheck 会要求构建一种方法PDF文件:

make[1]: *** No rule to make target `manual.pdf', needed by `distdir'.  Stop.

查看自动生成的 Makefile ,我看到了:

#am__append_1 = manual.pdf
am__dist_doc_DATA_DIST = manual.tex QuickStart.txt manual.pdf

然后我发现:

docfiles = manual.tex QuickStart.txt $(am__append_1)
#MANNAME = manual
#MANTEXSRC = $(MANNAME).tex
#MANAUX = $(MANNAME).aux
#MANPDF = $(MANNAME).pdf
#CLEANFILES = $(MANPDF) $(MANNAME).log $(MANNAME).idx $(MANNAME).out \
# $(MANNAME).toc $(MANAUX) .btmp

dist_doc_DATA = $(docfiles)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

我认为你的问题是你有条件地“分发”manual.pdf,而且自动化对于dist规则相当保守。试试这个:

if HAVE_PDFLATEX
doc_DATA = manual.pdf
# Rest of your stuff...
endif