ZBar源码分析(十)

2021SC@SDUSC

目录

一、Makefile.am文件分析


一、Makefile.am文件分析

Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./configure的时候,就将Makefile.in文件自动生成Makefile文件了。所以Makefile.am文件是比Makefile文件更高的抽象。
 

ACLOCAL_AMFLAGS = -I config
bin_PROGRAMS =
check_PROGRAMS =
EXTRA_PROGRAMS =
lib_LTLIBRARIES =
pyexec_LTLIBRARIES =
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
BUILT_SOURCES =
EXTRA_DIST =
SUBDIRS = .

ACLOCAL_AMFLAGS指定宏文件的存放目录为config。

PROGRAMS表示可执行文件,XX_PROGRAMS指明编译的应用程序名称,安装到系统中的XX目录中。

XX_LTLIBRARIES表示静态库文件,LTLIBRARIES前面的LT表示libtool,lib_LTLIBRARIES将在$(libdir)安装库, pyexec_LTLIBRARIES将安装到$(pyexecdir)。

CLEANFILES表示执行make clean时候需要删除的文件。

DISTCLEANFILES表示执行make distclean时候需要删除的文件,一般是EXTRA_DIST中的.in文件生成的不需要打包的中间文件。

MAINTAINERCLEANFILES表示执行make maintainer-clean时候需要删除的文件,即执行autoreconf -vfiintltoolize --force以及configure或执行autogen.sh后能够重新生成的文件都要放入其中。

XX_SOURCES表示编译可执行文件所需的源文件。

EXTRA_DIST指定要被打包的额外文件,即执行make dist时需要被放入压缩包的文件,一般是不需要参与编译但是又需要被使用的文件,比如图片目录里的图片。

SUBDIRS指定需要递归automake的子文件夹,即存在Makefile.am的子文件夹。

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = zbar.pc

pkgconfigdir表示预定义目录。

pkgconfig_DATA表示数据文件,zbar.pc将会安装到$(libdir)/pkgconfig目录下。

dist_doc_DATA = COPYING HACKING INSTALL LICENSE NEWS README TODO

dist_doc_DATA表示程序运行需要的数据文件,比如图标、配置文件等,包括COPYING HACKING INSTALL LICENSE NEWS README TODO。

include $(srcdir)/include/Makefile.am.inc
include $(srcdir)/zbar/Makefile.am.inc

展开并包含include文件夹和zbar文件夹下的Makefile.am.inc文件。

if HAVE_MAGICK
include $(srcdir)/zbarimg/Makefile.am.inc
endif
if HAVE_VIDEO
include $(srcdir)/zbarcam/Makefile.am.inc
endif
if HAVE_PYTHON
include $(srcdir)/python/Makefile.am.inc
endif
if HAVE_GTK
include $(srcdir)/gtk/Makefile.am.inc
pkgconfig_DATA += zbar-gtk.pc
if HAVE_PYTHON
include $(srcdir)/pygtk/Makefile.am.inc
endif
endif
if HAVE_QT
include $(srcdir)/qt/Makefile.am.inc
pkgconfig_DATA += zbar-qt.pc
endif
if HAVE_JAVA
SUBDIRS += java
endif
if HAVE_NPAPI
include $(srcdir)/plugin/Makefile.am.inc
endif

 判断并选择展开并包含其他目录下的Makefile.am.inc文件。

include $(srcdir)/test/Makefile.am.inc
include $(srcdir)/doc/Makefile.am.inc

 展开并包含test文件夹和doc文件夹下的Makefile.am.inc文件。

EXTRA_DIST += examples/barcode.png examples/upcrpc.py examples/upcrpc.pl \
    examples/scan_image.c examples/scan_image.cpp examples/scan_image.vcproj

EXTRA_DIST += perl/MANIFEST perl/README perl/Changes perl/COPYING.LIB \
    perl/Makefile.PL perl/typemap perl/ZBar.xs perl/ppport.h \
    perl/ZBar.pm perl/inc/Devel/CheckLib.pm perl/ZBar/Image.pod \
    perl/ZBar/ImageScanner.pod perl/ZBar/Processor.pod perl/ZBar/Symbol.pod \
    perl/examples/paginate.pl perl/examples/processor.pl \
    perl/examples/read_one.pl perl/examples/scan_image.pl \
    perl/t/barcode.png perl/t/ZBar.t perl/t/Decoder.t perl/t/Image.t \
    perl/t/Processor.t perl/t/Scanner.t perl/t/pod.t perl/t/pod-coverage.t

 添加指定要被打包的额外文件。

if WIN32
dist_doc_DATA += README.windows
pkgdata_DATA = $(srcdir)/examples/barcode.png \
    $(srcdir)/examples/scan_image.cpp $(srcdir)/examples/scan_image.vcproj

%-rc.o: %.rc
	$(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) -o $@ $<
%-rc.lo: %.rc
	$(LIBTOOL) --tag=RC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) -o $@ $<

dist-nsis: html-local
	test ! -e _nsis || test -d _nsis && rm -rf _nsis
	mkdir _nsis
	tmpinst=`cd _nsis && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
	  && $(MAKE) $(AM_MAKEFLAGS) DESTDIR=$$tmpinst prefix=/ install
	cp zbar/.libs/libzbar-0.dll.def _nsis/lib/libzbar-0.def
	cp -r doc/html _nsis/share/doc/zbar/
	$(WINEXEC) lib.exe /machine:x86 /def:_nsis/lib/libzbar-0.def /out:_nsis/lib/libzbar-0.lib
	cd _nsis && \
	  makensis -NOCD -V2 -DVERSION=$(VERSION) $(abs_srcdir)/zbar.nsi
	@ls -l _nsis/zbar-$(VERSION)-setup.exe
endif

WIN32环境下的编译方法,安装到tmp dest并运行NSIS生成安装程序。

上一篇:MyBatis 实践 -动态SQL/关联查询


下一篇:BFC和IFC