- 浏览: 1529319 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
运用 autoconf 和 automake 自动生成 Makefile 实例讲解
http://hi.baidu.com/vctianya/blog/item/dd1a1c7a14118fee2e73b3c8.html
对于一个
UNIX/Linux
下
C
程序员来说,一个比较麻烦的工作就是写自己的
Makefile
。
可能你有如下经验:写一个简单的
C
程序,自己多写几行
gcc
命令就把程序变成可执行的了;写一个稍微复杂点的程序,源文件个数可能在
30
个左右,还是写一行行的
gcc
命令就麻烦了,你可能想到写个
makefile
,你可能也在这样做着;但你某一天会发现你写的这个
Makefile
可能不是一个所有
UNIX/Linux
类操作系统下通用的
Makefile
,比如某人下载了你的程序去他自己电脑上可能
make
不了。
这样,你就有必要了解并学会运用
autoconf
和
automake
了。
autoconf
是一个用于生成可以自动地配置软件源代码包以适应多种
UNIX
类系统的
shell
脚本的工具。由
autoconf
生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要手工给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。因此,它们在混合系统或者从各种常见
UNIX
变种定制而成的系统中工作的很好。你也省了工作,没必要维护文件以储存由各个
UNIX
变种、各个发行版本所支持的特征的列表。
automake
是一个从文件
Makefile.am
自动生成
Makefile.in
的工具。每个
Makefile.am
基本上是一系列
make
的宏定义(
make
规则也会偶尔出现)生成的
Makefile.in
,服从
GNU Makefile
标准。
为了生成
Makefile.in
,
automake
需要
perl
。但是由
automake
创建的发布完全服从
GNU
标准,并且在创建中不需要
perl
。
在开始使用
autoconf
和
automake
之前,首先确认你的系统安装有
GNU
的如下软件:
1. automake
2. autoconf
3. m4
4. perl
5.
如果你需要产生共享库(
shared
library
)则还需要
GNU
Libtool
介绍方法之前大家看一下下面这个图,先记下
autoconf
和
automake
工作的几个步骤:
<!-- --><!-- --><!-- -->
步骤解释如下:
1
、由你的源文件通过
autoscan
命令生成
configure.scan
文件,然后修改
configure.scan
文件并重命名为
configure.in
2
、由
aclocal
命令生成
aclocal.m4
3
、由
autoconf
命令生成
configure
4
、编辑一个
Makefile.am
文件并由
automake
命令生成
Makefile.in
文件
5
、运行
configure
命令生成
Makefile
automake
支持三种目录层次:
flat
、
shallow
和
deep
。
一个
flat
包指的是所有文件都在一个目录中的包。为这类包提供的
Makefile.am
不需要
SUBDIRS
这个宏。这类包的一个例子是
termutils
。对应咱们程序员来说:就是所有源文件及自己写的头文件都位于当前目录里面,且没有子目录。
一个
deep
包指的是所有的源代码都被储存在子目录中的包;顶层目录主要包含配置信息。
GNU
cpio
是这类包的一个很好的例子,
GNU
tar
也是。
deep
包的顶层
Makefile.am
将包括宏
SUBDIRS
,但没有其它定义需要创建的对象的宏。对应咱们程序员来说:就是所有源文件及自己写的头文件都位于当前目录的一个子目录里面,而当前目录里没有任何源文件。
一个
shallow
包指的是主要的源代码储存在顶层目录中,而各个部分(典型的是库)则储存在子目录中的包。
automake
本身就是这类包(
GNU make
也是如此,它现在已经不使用
automake
)。对应咱们程序员来说:就是主要源文件在当前目录里,而其它一些实现各部分功能的源文件各自位于不同目录。
前两个层次的程序编辑方法非常简单,按照上述步骤一步步即可。而第三种层次
shallow
稍微复杂一点,但这是我们经常写程序用到的结构。下面以一个例子说明
shallow
层次结构的源文件如何自动生成
Makefile
文件。
例子源程序结构如下:
hello
是我们的工作目录,
hello
目录下有
main.c
源文件和
comm
、
tools
、
db
、
network
、
interface
等五个目录。
comm
目录下有
comm.c
和
comm.h
源文件及头文件,
tools
目录下有
tools.c
和
tools.h
,同样其它目录分别有
db.c
、
db.h
、
network.c
、
network.h
、
interface.c
、
interface.h
等一些源文件。
按照如下步骤来自动生成
Makefile
吧:
1
、进入
hello
目录,运行
autoscan
命令,命令如下:
cd hello
autoscan
2
、
ls
会发现多了一个
configure.scan
文件。修改此文件,在
AC_INIT
宏之后加入
AM_INIT_AUTOMAKE(hello, 1.0)
,这里
hello
是你的软件名称,
1.0
是版本号,即你的这些源程序编译将生成一个软件
hello-1.0
版。然后把
configure.scan
文件的最后一行
AC_OUTPUT
宏填写完整变成
AC_OUTPUT(Makefile)
,表明
autoconf
和
automake
最终将生成
Makefile
文件。最后把
configure.scan
文件改名为
configure.in
。最终
configure.in
文件内容如下:
# Process this file with autoconf to produce a configure script.
AC_INIT(target.c)
AM_INIT_AUTOMAKE(hello, 1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)
3
、运行
aclocal
命令,
ls
会发现多了一个
aclocal.m4
文件。
4
、然后运行
autoconf
命令,
ls
将发现生成了一个可执行的
configure
命令。
5
、编辑一个
Makefile.am
文件,文件内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=main.c comm/comm.c comm/comm.h tools/tools.c tools/tools.h
db/db.c db/db.h network/network.c network/network.h interface/interface.c
interface/interface.h
这表明你最后将通过一个
make
命令利用上述
hello_SOURCES
源文件生成一个
hello
的程序。
6
、运行
automake
--add-missing
命令。屏幕提示如下:
automake: configure.in: installing `./install-sh'
automake: configure.in: installing `./mkinstalldirs'
automake: configure.in: installing `./missing'
7
、然后你可以运行之前生成的
configure
命令来生成一个
Makefile
文件,输入
./configure
命令即可。
8
、编辑
Makefile
文件,找到
$(LINK)
所在的那一行,本来生成的文件内容如下:
@rm -f hello
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
在这两行之间增加几行变成:
@rm -f hello
@mv -f comm.o comm
@mv -f tools.o tools
@mv -f db.o db
@mv -f network.o network
@mv -f interface.o interface
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
这是因为默认生成的
Makefile
将在编译后把所有目标文件置于当前目录,而在进行链接
(link)
时又会到各个子目录去找相应的目标文件。
当然,为了完整,建议各位在
clean
部分加上如下一些行:
@rm -f comm/comm.o
@rm -f tools/tools.o
@rm -f db/db.o
@rm -f network/network.o
@rm -f interface/interface.o
好了,经过上述这些步骤后,现在你可以来编译生成你自己的可执行程序了。输入一个
make all
吧,然后就可以运行
./hello
来看你的程序运行了。
运用
autoconf
和
automake
的最大好处是,你的程序以源程序方式发布后,其它所有人只需要依次输入
./configure
make
make install
命令就可以把你的程序安装在自己的电脑上运行了。所有符合
GNU
标准的
UNIX/Linux
都不需要再修改
Makefile
里的任何字符。
发表评论
-
数据结构与算法分析(C语言描述)源代码与答案
2009-12-14 11:44 6724数据结构与算法分析(C语言描述)(第二版) Mark A ... -
A new Michael Jackson song
2009-10-12 16:48 959<!-- [if gte mso 9]><x ... -
makefile 大全
2009-02-24 07:37 1193http://chenl.blogbus.com/logs ... -
Linux_Unix环境下的Make和Makefile详解
2009-02-24 07:35 1328无论是在 Linux 还是在 U ... -
C++的11个注意要点
2009-02-24 07:33 1039C++ 的 11 个注意要点 ... -
makefile详解(6)
2009-02-24 07:23 1796makefile 详解( 6 ) ... -
makefile详解(5)
2009-02-24 07:22 1686<!-- --><!-- -->& ... -
makefile详解(4)
2009-02-24 07:21 1431<!-- --><!-- -->& ... -
makefile详解(3)
2009-02-24 07:20 1647<!-- --><!-- --> & ... -
makefile详解(2)
2009-02-24 07:19 1343<!-- --><!-- --> & ... -
makefile详解(1)
2009-02-24 07:18 1517makefile 详解 ... -
VC++动态链接库(DLL)编程深入浅出(二) Win32 Dynamic-Link Library
2008-08-19 14:23 8037上节给大家介绍了静态链接库与库的调试与查看( 动态链 ... -
VC++动态链接库(DLL)编程深入浅出(一) Win32 Static Library
2008-08-19 14:13 7123http://www.pconline.com.cn/pced ... -
VC++常用数据类型及其操作详解
2008-08-18 23:43 1395http://blog.csdn.net/flxyzsby/a ... -
VC++数据类型转换大全
2008-08-18 23:25 64119int i = 100; long l = 2001; f ... -
DLL导出变量
2008-08-18 16:20 2081DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进 ... -
DLL导出类
2008-08-18 16:20 2638DLL中定义的类可以在应用工程中使用。 下面的例子里,我 ... -
MFC规则DLL 概述
2008-08-18 16:19 2829MFC规则DLL的概念体现在两方面: (1) 它是MFC ... -
MFC规则DLL的创建
2008-08-18 16:18 1865我们来一步步讲述使用MFC向导创建MFC规则DLL的过程,首先 ... -
MFC规则DLL 简单的例子
2008-08-18 16:16 3969这个DLL的例子(属于静态链接到MFC 的规则DLL)中提供了 ...
相关推荐
在Linux和Unix环境中,`automake`是一个自动化工具,它帮助开发者生成符合GNU标准的`Makefile.in`文件,这些文件随后会被`autoconf`处理,生成用户友好的`configure`脚本,使得软件编译过程更加标准化和跨平台。...
这个文档很可能提供了使用Automake的实例,包括如何配置Makefile.am文件,如何运行Automake和Autoconf命令,以及可能出现的问题和解决方法。通过阅读这个文档,你可以更深入地理解Automake的实际应用。 总的来说,...
`automake`和`autoconf`是两个与`Makefile`紧密相关的工具,它们可以帮助开发者创建跨平台、符合GNU标准的构建系统。 `automake`是GNU项目的一部分,主要用于自动生成符合GNU标准的`Makefile.in`文件。这个文件是`...
紧接着,作者进一步深入讲解了高级细节,包括如何在Autoconf中使用M4宏处理器,如何扩展Automake提供的框架,以及如何构建Java和C#源代码。本书的高潮部分,作者提供了初学者在使用Autotools时经常遇到的问题的详细...
4. **生成Makefile.in**:运行autoconf和automake命令,基于configure.in和Makefile.am文件(Automake的输入),生成configure脚本和Makefile.in。configure脚本会在构建前运行,检测系统环境并自定义Makefile。 5....
GNU Autoconf和Automake是两个广泛使用的工具,它们帮助开发者创建跨平台的、符合GNU标准的Makefile。本指南将深入讲解这两个工具的使用方法和原理。 **GNU Autoconf** Autoconf是一个生成配置脚本的程序,这些...
在IT行业中,构建自动化工具是开发过程中的重要一环,其中`autoconf`是一个广泛使用的开源工具,主要用于生成跨平台的配置脚本,使源代码能够适应不同的操作系统和编译环境。`autoconf`通过自动检测系统特性并生成...
Autotools是一套用于在Unix-like操作系统上自动化生成软件构建系统的工具集,这包括了autoconf、automake和libtool等多个组件,目的是帮助开发者轻松编写可以在多种类Unix系统上编译和安装软件的脚本。这套工具链...
为此,Linux提供了autoconf和automake两个工具,它们能够自动生成Makefile,使得软件的构建、安装更加简便。许多知名的开源软件,如Apache和MySQL,都利用这两个工具实现自动编译。 首先,确保系统已经安装了...
GNU Autoconf 是一个用于生成自动配置脚本的工具,它可以让开发者编写一次代码,然后在各种Unix-like操作系统上进行配置。它通过检查编译器、库和其他系统特性来决定是否需要对源代码进行特定的修改以适应目标平台。...
`autotools`包括了多个工具,如`aclocal`、`autoscan`、`autoconf`、`autoheader`和`automake`,它们共同作用于项目,生成适应多种平台的配置脚本和Makefile。 首先,我们来看第一步,`autoscan`的使用。这个工具会...
- **创建amhello-1.0.tar.gz**: 这一步涉及使用`autoreconf`或`autoconf`和`automake`命令来生成初始的构建脚本和Makefile模板。 - **解读amhello的`configure.ac`**: 这个文件包含了Autoconf宏,用于检查系统特性、...
- 使用Autoconf和Automake自动生成配置头文件和Makefile文件的过程主要包括以下几个步骤: 1. **源文件处理**:从源文件开始,使用`autoscan`生成`configure.scan`文件。 2. **生成配置脚本**:将`configure.scan`...
Automake 是一个工具,可以帮助开发者生成 Makefile,以便更好地管理和编译项目。在本文档中,我们将使用 Automake 对一个工程进行管理,并生成 Makefile 等文件。 Automake 的使用实例 首先,我们需要创建一个...
`autoconf`通常与`automake`一起使用,`automake`负责生成遵循GNU标准的Makefile.am文件,这些文件再由`autoconf`生成的`configure`脚本处理。这种组合提供了更完整的构建系统,使得项目更容易遵循GNU编程规范。 **...
"配置过程"章节详细讲解了confgure脚本的作用,它是Autotools的核心部分,用于检测主机环境,生成Makefile以适应不同的编译和链接需求。这一过程对于确保软件能够正确地识别和利用系统上的各种库和特性至关重要。 ...
- **AutoMake**:作为GNU项目的一部分,AutoMake是一种辅助工具,用于自动生成`Makefile.in`文件,这些文件随后会在软件构建过程中被配置成特定于平台的`Makefile`文件。 #### 二、通用性概念 - **通用操作**:...
`automake`会根据这些文件生成`Makefile.in`,然后`autoconf`将这个模板转化为具体的Makefile,适应用户的系统环境。 在C++的实例中,情况类似,但可能会涉及到`.cpp`和`.hpp`文件。`automake`会处理链接C++库和...