使用autotools生成符合自由软件标准的Makefile

一直以来在开发中我都是使用自己手工编写的简单Makefile进行代码的编译的,编写一个简单的Makefile通常不太复杂,只需要设置一些编译条件的变量,objs列表,加上几行简单的代码即可。但是这样的makefile在很多情况下会暴露出很大缺点,例如在另一个环境的机器上编译等,很可能需要改写Makefile.

 

使用autotools生成符合自由软件标准的Makefile,就可以帮助我们解决这个问题。我们可以使用像标准的软件包一样的方式进行编译和安装,形式如下:

./configure

make

make install

 

下面来总结一下autotools的简单使用:

autotools是一系列的工具包含aclocal,autoscan,autoconf,autoheader,automake

 

aclocal用于生成aclocalm4,用于帮助autoconf生成configure

autoscan 用于生成一个叫做configure.scan的文件,该文件可以作为configure.in的模板

autoconf 使用aclocalm4和configure.in一起生成configure

autoheader 负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义

automake 通过他的配置文件Makefile.am和configure.in生成Makefile.in文件

 

用户最后调用configure来生成Makefile

 

具体过程如下:

1、在每个需要生成可执行文件、静态库或动态库的目录中都先加入一个Makefile.am文件,作为automake的配置文件

内容需要如下:

AUTOMAKE_OPTIONS=foreign   #foreign/gnu/gnits软件等级foreign表示只检查必须的文件,gnu是默认等级

bin_PROGRAMS= 生成目标名称    #bin_PROGRAMS表示可执行文件,noinst_LIBRARIES表示静态库不需要make install,lib_LTLIBRARIES表示动态库

生成目标名称_SOURCES= 所需的源文件,多个文件用空格分开

 

2、执行autoscan生成configure.scan,将其重命名为configure.in并对内容进行如下修改:

#                                               -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)      #这里是autoconf所需的版本

#The next one is modified by sunq

AC_INIT(软件包的全称,版本,[提交bug的邮箱])

# The next one is added by sunq

AM_INIT_AUTOMAKE(软件包的全称,版本)

AC_CONFIG_SRCDIR([需要检查的源文件])  #每个文件写一条

AC_CONFIG_HEADER([需要检查的头文件]) #每个文件写一条

# Checks for programs.

AC_PROG_CC   #需要有gcc

AC_PROG_GXX #需要有g++

# Checks for libraries.        #检查所需的lib是否走存在

# Checks for header files.  #检查所需的头文件是否存在

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_PROG_LIBTOOL            #如果是编译库需要加上这条

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

 

3、接下来执行aclocal

 

4、执行autoconf

 

5、执行automake --add-missing

 

如果上面的两个配置文件都没写错的话,就可以生成正确的configure和Makefile.in了

 

6、执行./configure生成Makefile

 

这样就大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值