标签:
linux使用autoconf和automake生成configure
引子
无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。
但是如果通过查阅make的帮助文档来手工编写Makefile,对任何程序员都是一场挑战。幸而有GNU 提供的Autoconf及Automake这两套工具使得编写makefile不再是一个难题。
本文将介绍如何利用 GNU Autoconf 及 Automake 这两套工具来协助我们自动产生 Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把程序安装到系统中。
一、环境
Ubuntu14.04 LTS,安装automake ,sudo apt-get install automake
二、流程
来一张从网络上摘录的图片,看看大致的流程
三、实践
1、新建一个目录:xpcdetector,在xpcdetector目录中新建一个子目录:XPCDatabase、XPCNetwork,以及XPCDetector,其中前两个是动态库,XPCDetector则是可执行程序。
2、cd xpcdetector
3、执行命令:autoscan
4、将生成文件中的configure.scan改名为configure.ac,并修改文件内容:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT(etector, 1.0.0, ouxianghui@xitech.cn)
AC_CONFIG_SRCDIR([MacchinaDaemon/main.cpp])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
# Checks for libraries.
LT_INIT
# Checks for header files.
AC_CHECK_HEADERS([inttypes.h limits.h stdint.h stdlib.h string.h sys/param.h sys/time.h syslog.h unistd.h opencv/cv.h SDL.h SDL_thread.h libavformat/avformat.h Poco/Logger.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_INT16_T
AC_TYPE_INT64_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AM_INIT_AUTOMAKE([foreign])
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_CHECK_FUNCS([memset rint sqrt strchr strerror strstr strtol])
AC_CONFIG_FILES([Makefile
XPCDatabase/Makefile XPCNetwork/Makefile XPCDetector/Makefile XPCDaemon/Makefile XPCWatchdog/Makefile XPCWatchdogDaemon/Makefile MacchinaDaemon/Makefile])
AC_OUTPUT
5、在xpcdetector目录新建一个Makefile.am文件,并写入如下内容:
AUTOMAKE_OPTIONS = foreign
SUBDIRS = XPCDatabase XPCNetwork XPCDetector XPCDaemon XPCWatchdog XPCWatchdogDaemon MacchinaDaemon
其实就是定义一下子目录
6、在XPCDatabase、XPCNetwork,以及XPCDetector目录下分别新建一个Makefile.am文件,例如XPCDatabase目录下的Makefile.am的内容如下:
AUTOMAKE_OPTIONS = foreign
lib_LTLIBRARIES = libXPCDatabase.la
libXPCDatabase_la_SOURCES = DetectorSt.cpp DetectorSt.h DetectorTable.cpp DetectorTable.h
#include_HEADERS = DetectorSt.h DetectorTable.h
DEFS += -D_GNU_SOURCE
libXPCDatabase_la_LDFLAGS = -D_GNU_SOURCE -shared –fPIC
libXPCDatabase_la_LIBADD = -L/usr/local/macchina/lib/ -lPocoFoundation -lPocoData -lPocoDataSQLite
libXPCDatabase_la_CXXFLAGS = -I/usr/local/macchina/include/
7、回到xpcdetector目录下新建一个autogen.sh文件,内容如下:
#!/bin/sh
aclocal
autoheader
automake --add-missing
autoconf
8、在xpcdetector目录下执行命令:bash ./autogen.sh
9、./configure --prefix=[安装路径名]
10、make -j4
11、sudo make install
四、可能遇到的问题
在linux下编译c/c++程序出错:
$ automake --add-missing
....
configure.in:18: required file `build/ltmain.sh‘ not found
....
解决方案(libtoolize配置即可):
$libtoolize --version
-libtoolize (GNU libtool) 1.4.2
.....
$libtoolize --automake --copy --debug --force
如果没有安装libtool请先安装:sudo apt-get install libtool
linux使用autoconf和automake生成configure
标签:
原文地址:http://www.cnblogs.com/jmucv/p/4942071.html