latex - Autoconf/Automake 条件和 dist 规则

标签 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 存在时有效,但当它不存在时运行 makeworks,但 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)

我在这里缺少什么?

最佳答案

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

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

关于latex - Autoconf/Automake 条件和 dist 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7027606/

相关文章:

LaTeX:防止文本范围内换行

latex - 如何使用 LaTeX (Overleaf) 输入梵文?

autoconf - 如何检查包头是否存在?

c++ - 将标志 "-fno-implicit-templates"添加到 CMake 文件

Autotools AC_DEFINE 不起作用

linux - 如何将自动制作文件写入递归构建子目录?

pdf - 链接到 LaTeX Beamer 中的外部应用程序

latex - 可以将 'Abstract' 参数传递给 pandoc 以创建 latex 文件吗?

makefile - 从 URL 列表中下载文件列表作为 makefile 中的先决条件

linux - Debian/Ubuntu 软件包默认安装在 root 中