Using Automake and Autoconf to manage large project

本文介绍如何使用Autoconf和Automake构建自动化项目,涵盖源码树结构、关键文件编写、国际化支持等,提供完整的构建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

I. Hello world!


a. 建立源码树

proj

|---- NEWS

|---- README

|---- AUTHORS

|---- ChangeLog

|---- src ----------------> 源码目录

| |---- Makefile.am

| `---- hello.c

|

|---- Makefile.am

`---- configure.ac


b. 撰写 proj/configure.ac

Autoconf 据此生成configure脚本。

基本功能的configure.ac应包括以下的宏:

AC_INIT(Full-Package-Name, Version, Bug-Report-Address)

AM_INIT_AUTOMAKE # 初始化

AM_CONFIG_HEADER(config.h)  #生成项目的配置头文件

#如:项目支持国际化,则其中会定义ENABLE_NLS 为1

AC_PROG_CC # 检查C编译器

AC_PROG_CXX # 检查C++编译器

AC_PROG_INSTALL # 检查install 工具


AC_CONFIG_FILES([Makefile po/Makefile]) # 要输出的Makefile

AC_OUTPUT

也可以在源码根目录下执行autoscan,自动分析,写入您可能需要的宏到

configure.scan中,修改之,并改名为configure.ac即可。


c. 撰写 proj/Makefile.am


此为顶层 Makefile.am, 仅需告诉Automake,哪些目录需要Automake 去处理:

SUBDIRS = src


哪些文件需要发布,但无须编译:

EXTRA_DIST = README ChangLog



d. proj 下建立 GNU-Style 项目所要求的文件


touch NEWS README AUTHORS ChangLog

如不想使用GNU-Style,可在proj/Makefile.am 中指定:


AUTOMAKE_OPTIONS = foreign

否则automake会报错。


e. 为每个子目录撰写Makefile.am

src子目录下是为构建hello程序的源码,则其下Makefile.am中写入:

bin_PROGRAMES = hello

hello_SOURCES = hello.c


如果要链接库,可加入:


hello_LDADD = -ldl -lpthread



f. 完整的build步骤


aclocal -I. ------------> 生成aclocal.m4

autoheader -f ------------> 生成config.h.in

automake -a -c -f ------------> makefile.am生成Makefile.in

autoconf ------------> configure.ac生成configure

./configure ------------> Makefile.in生成Makefile

make



II. 开发中常用的Autoconf


AC_INIT(Full-Package-Name, Version, Bug-Report-Address)


AM_INIT_AUTOMAKE


AM_CONFIG_HEADER(config.h)  #生成项目的配置头文件

#如项目支持国际化,则其中会定义ENABLE_NLS 为1


AC_CONFIG_SRCDIR([src/hello.c])


AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL


AC_PROG_MAKE_SET


# 构建动态共享库支持

AC_PROG_LIBTOOL

AC_PROG_RANLIB


# 国际化支持

AC_PROG_INTLTOOL([Intltoolize_Version])

ALL_LINGUAS=””

AM_GLIB_GNU_GETTEXT #使用GLib库的gettext机制

AM_GNU_GETTEXT #使用Libc库的gettext机制


AC_CONFIG_FILES([Makefile po/Makefile])

AC_OUTPUT



III. 开发中常用的Automake变量


# 通用变量

_SOURCES =

noinst_HEADERS =

INCLUDES =

_CFLAGS =

_CPPFLAGS =

_CXXFLAGS =

_LDFLAGS = # 没有libtool时,是否可用?


# 构建可执行程序

bin_PROGRAMS =

_LDADD =


# 构建静态库

bin_LIBRARIES = libhello.a

libhello_a_LIBADD =


# 构建动态库

lib_LTLIBRARIES = libhello.la

libhello_la_LIBADD = -rpath ./




IV. 参考源码树


proj

|---- NEWS

|---- README

|---- AUTHORS

|---- ChangeLog

|---- doc ----------------> 文档目录

|---- test ----------------> 测试代码目录

|---- src ----------------> 源码目录

|---- po ----------------> 国际化文件目录

|---- res ----------------> 资源目录

|---- glade ----------------> glade文件

`---- image ----------------> 图像文件

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值