【问题标题】:Autoconf/Automake conditionals and dist rulesAutoconf/Automake 条件和 dist 规则
【发布时间】:2011-10-25 01:13:18
【问题描述】:

我最近开始在我正在进行的项目中使用 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.

查看 automake 生成的 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)

我在这里错过了什么?

【问题讨论】:

    标签: latex makefile autoconf automake


    【解决方案1】:

    我认为您的问题是您有条件地“分发”manual.pdf,并且 automake 对 dist 规则相当保守。试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多