ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ZBar源码分析(十)

2021-12-12 23:03:17  阅读:290  来源: 互联网

标签:分析 Makefile am perl 源码 examples srcdir ZBar inc


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生成安装程序。

标签:分析,Makefile,am,perl,源码,examples,srcdir,ZBar,inc
来源: https://blog.csdn.net/sdu_DYL/article/details/121894031

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有