ph0*_*nix 4 automake autoconf latex makefile
我最近开始使用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")
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
当pdflatex存在时,此设置有效,但当缺少运行make make时,但make distcheck要求构建PDF文件的方法:
make[1]: *** No rule to make target `manual.pdf', needed by `distdir'. Stop.
Run Code Online (Sandbox Code Playgroud)
查看automake生成的Makefile,我看到:
#am__append_1 = manual.pdf
am__dist_doc_DATA_DIST = manual.tex QuickStart.txt manual.pdf
Run Code Online (Sandbox Code Playgroud)
然后我发现:
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)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我认为你的问题是你有条件地"分发" manual.pdf,而且自动化对于dist规则相当保守.试试这个:
if HAVE_PDFLATEX
doc_DATA = manual.pdf
# Rest of your stuff...
endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |