2011-08-11 78 views
4

我最近開始使用autoconf和automake作爲我正在開發的項目。該項目的文檔是用LaTeX編寫的。由於我不希望將LaTeX作爲依賴項,我想檢查是否存在使用autoconf的二進制文件,然後使用Makefile.am中的信息來決定是否簡單複製.tex文件到文檔目錄,或生成PDF並複製兩者。Autoconf/Automake條件和dist規則

這是相關部門在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存在,但是當它缺席時使作品,但化妝distcheck詢問的方式來建立PDF文件:

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

尋找在的Makefile是AUTOMAKE產生我見:

#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) 

我在這裏錯過了什麼?

回答

5

我認爲你的問題是你有條件地「分發」manual.pdf,automake對於dist規則比較保守。試試這個:

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

非常感謝!我完全忽略了... – ph0t0nix