2021SC@SDUSC
目录
一、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 -vfi
、intltoolize --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生成安装程序。