码迷,mamicode.com
首页 > 系统相关 > 详细

linux使用autoconf和automake生成configure

时间:2015-11-06 12:44:07      阅读:462      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!