autoconf、automake工具组使用简单介绍

automake搭建项目工程 automake 搭建项目工程 阅读详情
 

Autoconf、automake工具组使用简单介绍

Autoconf、automake工具组是Unix/Linux下编译大型项目的有力工具。使用它们可以省去我们手工编写makefile文件的麻烦,而且还能提高可靠性和项目移植性。在这里简单介绍automake工具组的使用。

以大家都熟知的helloworld为例,首先建立专门的目录,如helloworld,

$ mkdir helloworld

$ cd helloworld/

$ vi helloworld.c

  1 #include<stdio.h>

  2 int main()

  3 {

  4     printf("Hello,World!\n");                                                         

  5     return 0;

  6 }

运行autoscan:

$ autoscan

$ ls

autoscan.log  configure.scan  helloworld.c

$ vi configure.scan

1 #                                               -*- Autoconf -*-                      

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

  3

  4 AC_PREREQ([2.63])  //autoconf版本号

  5 AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) //软件名称、版本和提交bug报告的邮箱等信息

  6 AC_CONFIG_SRCDIR([helloworld.c]) //侦测指定的源码文件文件是否存在,来确定源码目录的有效性。此处为当前目录下的helloworld.c

  7 AC_CONFIG_HEADERS([config.h])  //用以生成config.h文件,以便autoheader使用

  8

  9 # Checks for programs.

 10 AC_PROG_CC  //指定编译器,默认指定gcc

 11

 12 # Checks for libraries.

 13

 14 # Checks for header files.

 15

 16 # Checks for typedefs, structures, and compiler characteristics.

 17

 18 # Checks for library functions.

 19

 20 AC_OUTPUT  //用来设定configure所要产生的文件,如果是makefile,configure会把它检查出来的结果带入makefile.in文件,产生合适的makefile。

configure.scan似乎只是个模板,还要根据自己的情况填写修改相应内容。修改后的内容为:

  1 #                                               -*- Autoconf -*-

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

  3

  4 AC_PREREQ([2.63])

  5 AC_INIT(helloworld, 1.0)

  6 AC_CONFIG_SRCDIR(helloworld.c)

  7 AC_CONFIG_HEADERS(config.h)

  8 AM_INIT_AUTOMAKE(helloworld,1.0)  //添加该宏用于automake,参数分别是程序的名字和版本                                                      

  9

 10 # Checks for programs.

 11 AC_PROG_CC

 12

 13 # Checks for libraries.

 14

 15 # Checks for header files.

 16

 17 # Checks for typedefs, structures, and compiler characteristics.

 18

 19 # Checks for library functions.

 20

 21 AC_OUTPUT(Makefile)

修改configure.scan的名字为configure.in:

$ mv configure.scan configure.in

$ ls

autoscan.log  configure.in  helloworld.c

有的文章是改为configure.ac,可能是automake工具组不同版本的问题吧。

之后运行autoheader命令:

$ autoheader

ll

总计 20

drwxr-xr-x 2 zhl zhl 4096 09-23 23:17 autom4te.cache

-rw-rw-r-- 1 zhl zhl    0 09-23 22:37 autoscan.log

-rw-rw-r-- 1 zhl zhl  471 09-23 23:17 config.h.in

-rw-rw-r-- 1 zhl zhl  474 09-23 23:08 configure.in

-rw-rw-r-- 1 zhl zhl   71 09-23 22:36 helloworld.c

-rw-rw-r-- 1 zhl zhl   79 09-23 23:12 Makefile.am

接着,创建Makefile.am文件,为生成Makefile.in文件做准备:

$ vi Makefile.am

1 AUTOMAKE_OPTIONS=foreign

2 bin_PROGRAMS=helloworld

3 helloworld_SOURCES=helloworld.c

其中:

1、             AUTOMAKE_OPTIONS为设置automake的选项。GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了3种软件等级:foreign、gnu和gnits,供用户选择,默认等级为gnu。本例使用foreign等级,它只检测必须的文件。

2、             bin_PROGRAMS定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。

3、             helloworld_SOURCES定义“helloworld”这个执行程序所需要的原始文件。如果“helloworld”这个程序是由多个原始文件所产生的,则必须把它用到的所有原始文件都列出来,并用空格隔开。例如:若目标体“helloworld”需要“helloworld.c”、“helloworld.h”两个依赖文件,则定义helloworld_SOURCES=helloworld.c helloworld.h。

继续运行aclocal命令:

$ aclocal

$ ls

aclocal.m4      autoscan.log  configure.in  Makefile.am

autom4te.cache  config.h.in   helloworld.c

运行autoconf命令:

$ autoconf

$ ls

aclocal.m4      autoscan.log  configure     helloworld.c

autom4te.cache  config.h.in   configure.in  Makefile.am

使用automake命令生成Makefile.in文件,使用选项“—add-missing”可以让automake自动添加一些必需的脚本文件。

$ automake --add-missing

configure.in:8: installing `./install-sh'

configure.in:8: installing `./missing'

$ ls

aclocal.m4      autoscan.log  configure     helloworld.c  Makefile.am  missing

autom4te.cache  config.h.in   configure.in  install-sh    Makefile.in

此时,运行自动配置文件configure,就可以把Makefile.in变成最终的Makefile文件了。

$ ./configure

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking for gcc... gcc

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking for style of include used by make... GNU

checking dependency style of gcc... none

configure: creating ./config.status

config.status: creating Makefile

config.status: creating config.h

config.status: executing depfiles commands

$ ls

aclocal.m4      config.h     config.status  helloworld.c  Makefile.am  stamp-h1

autom4te.cache  config.h.in  configure      install-sh    Makefile.in

autoscan.log    config.log   configure.in   Makefile      missing

可以看到Makefile文件已经产生出来了,之后就可以使用方便的使用make命令了。

$ make

make  all-am

make[1]: Entering directory `/home/zhl/pthread/helloworld'

gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo -c -o helloworld.o helloworld.c

mv -f .deps/helloworld.Tpo .deps/helloworld.Po

gcc  -g -O2   -o helloworld helloworld.o 

make[1]: Leaving directory `/home/zhl/pthread/helloworld'

$ ls

aclocal.m4      config.h.in    configure     helloworld    install-sh   Makefile.in

autom4te.cache  config.log     configure.in  helloworld.c  Makefile     missing

config.h        config.status  depcomp       helloworld.o  Makefile.am  stamp-h1

可以看到已经生成可执行文件helloworld。

另外,我们还可以执行以下符合GNU Makefile惯例的Makefile预定义操作:

make clean:清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行的文件。

make install:将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。

make dist:产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。

它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE,VERSION)。

make distcheck:生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make来确定编译不出现错误,最后提示你软件包已经准备好,可以发布了。

make distclean:类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。

 

总结:本文章只能算抛砖引玉,使大家对automake有个大致的了解。automake工具组的使用绝不仅仅这么简单,还有许多复杂的配置,需要查询更多的资料。上面的讲解中使用了好几个文件和命令,它们之间的关系可能一时难以搞清楚。所以用一幅图来表示它们之间的关系。

automake与autoconf 在linux c开发,对于小项目,写一个简单的Makefile就可以构建程序了,但是如果写一个自由软件的Makefile呢? 我们经常用到的是automake和autoconf,就可以使用./configure,make,make install安装程序了。 一、安装工具软件 centos: #sudo yum install autoconf automake libtool -y ... 阅读详情

相关推荐

automake/autoconf打包简单实例

本文将简单介绍为一个简单项目制作自动生成makefile文件的方法。        项目描述:        项目目录如下所示:               该项目中一个源文件用来生成库文件,两外两个源文件用来生成使用库文件的应用程序。        为这个项目运用自动工具,首先要为该项目创建5个文件,主要是:        1、autogen.h   运行自动工具以产生构建环境的s

qqsj110的专栏 1814

linux之autoconf(1)基础介绍

介绍Autoconf、automake等autotools工具的基本常识,以及如何在编译流程中的作用

梅花香自苦寒来,宝剑锋从磨砺出。 3937

PCI-Express、MiniPCIe、ExpressCard接口转换说明/引脚互换关系

通过引脚PIN互换可以在PCI-Express、MiniPCIe、ExpressCard之间切换不同的接口;提供接口引脚表和标准尺寸图。

tech34的博客 7123

【Linux笔记】【基础系列】 automake基础使用

【Linux笔记】【基础系列】 Automake基础使用 GNU Automake 是一个从模板文件创建符合 GNU 标准的 Makefile 的程序。Automake 从名为 Makefile.am 的文件中自动生成 Makefile.in。Automake 是一组称为 Autotools 的工具的一部分。其中包含名为 configure、configure.ac、Makefile.in、Makefile.am、aclocal.m4 等文件的包,其中一些是由 Autoconf 或 Automake 生成的

3321

SpyGlass CDC实战:如何用sgdc约束文件解决跨时钟域报错(附常见错误排查)

本文详细介绍了如何使用SpyGlass CDC工具编写sgdc约束文件解决跨时钟域(CDC)报错问题。从基础语法到实战案例,涵盖时钟声明、复位约束、路径豁免等关键技巧,特别针对SPI断续时钟等特殊场景提供解决方案,并附常见错误排查指南,帮助工程师高效完成CDC验证。

weixin_28744423的博客 626

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

深入理解Linux命令 - autoconf

autoconf是一个用于生成配置脚本的工具,这些脚本可以帮助开发者确定编译软件时所需的参数和选项。它通过读取一个名为(或,这是旧版本的命名方式)的模板文件来生成configure脚本。autoconf是一个强大的工具,它可以帮助开发者更容易地跨多个平台和系统编译和安装软件。通过使用autoconf,你可以确保你的软件能够在各种不同的系统上正确地编译和运行。

听风的鱼鱼儿 1462

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6504

Autoconf和Automake使用

你还可以试着使用一些其他的make命令,如make clean,make install,make dist,看看它们会给你什么样的效果。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。用automake产生出来的Makefile.in文件是符合GNU Makefile惯例的,接下来我们只要执行configure这个shell 脚本就可以产生合适的 Makefile 文件了。

moran的博客 1707

基于FPGA的64点fft变换verilog开发

这精度的损失在10bits看来对最后的误差的影响是存在是不可忽略的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FPGA/MATLAB学习教程/源码/项目合作开发 1977

10、进化动力学谱分析中的开放性问题

本文探讨了进化动力学谱分析中的若干开放性问题,重点围绕进化算法的性能与设计理论展开。文章首先介绍了规范模型及其线性动力学特性,随后深入分析了在实际应用中偏离理想情况的两个关键因素:有限种群和双亲重组。在此基础上提出了三个核心开放性问题:寻找最优传输矩阵以实现全局最优解的高效搜索、无限与有限种群模型谱之间的关系、以及卡林定理在多遗传算子下的推广可能性。通过谱条件、快速混合性与首次命中时间的关系分析,文章进一步讨论了全局吸引与快速收敛的理论基础,并提出了未来的研究方向,包括理论深化、实验拓展与跨学科融合,旨在为

cuda7parallel的博客 80

编译工具:makefile、autoconf、automake、libtool的关系

Autotools比较常见的有autoconf、automake、libtool等包,每个包又有多个工具。使用这几个工具,虽然能帮助我们自动生成Makefile,但是命令过程复杂,中间会生成大量的各种配置文件和脚本。很多人往往会觉得很麻烦、搞不懂里面错综复杂的关系,自己写的一篇文章,希望能帮助大家理理里面的关系。 手工makefile时代 早期我们在Unix、linux环境下开发软件,makefile都是手写的。通过makefile,我们就可以使用make命令直接去编译我们的源代码。 后来,随着Unix版

OceanStar的博客 3388

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 944

autoconf与automake使用简解

文章目录总结1. 安装automake,创建hello.c文件2. 使用autoscan自动检查hello.c编译所需的文件等3. 执行aclocal,生成aclocal.m4 配置文件4. 执行autoconf,生成configure文件5. 执行autoheader,生成config.h.in6. 创建Makefile.am文件,写入相关内容7. 根据实际情况创建常用文档文件8. 执行automake,生成Makefile.in9. 执行./configure生成最终的Makefile10. 运行mak

熹微橙光的博客 1357

innovus:set_clock_latency与insertion_delay

当1ns clock latency设置在capture上,在report_timing报告中体现在other end arrival time以及capture clock path的Arrival Time上。因为-1ns的insertion delay存在,所以skew group报告中显示的Arrival (ns)是减1ns的结果,即1.819-1=0.819 ns。CTS阶段create_ccopt_clock_tree_spec之后,spec中会产生对应的insertion_delay命令。

m0_61544122的博客 1621

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

autoconf automake使用

cmake 与autoconf automake使用的举例 目录 一、简介 二、示例过程如下 1、源文件 2、通过autscan命令,产生 configure.scan文件,修改为configure.ac 3、执行aclocal,产生aclocal.m4 配置文件 4、执行autoconf, 产生configure文件 5、执行autoheader 产生config.h.in 6、创建Makefile.am文件 7、根据情况,创建一些常用的文档文件NEWS README AUTHORS

王鑫宇的博客 7826

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大型项目使用Automake/Autoconf完成编译配置

大型项目使用Automake/Autoconf完成编译配置 使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。   这么好的东东当然要拿来用了,但GNU的Autoto

fd315063004的专栏 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用Automake和Autoconf 生成Makefile 实例

工具简介 GNU Autoconf 及 Automake 这两个软件就是帮助程序开发者轻松产生Makefile 。用户只要使用 “./configure”, “make”, “make install” 就可以把程序安裝到系统中。 整个automake构建过程如下所示: Autoscan 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件...

神技圈子的博客 5671

automake,autoconf使用详解

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了. 在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的 Makefile,这样就可以象常见的 GNU程序一样,...

团长的专栏 777

Autoconf和Automake工具组简介

Autoconf/Automake工具用于自动创建功能完善的makefile文件。当前大多数软件包都是用这一工具生成makefile文件的。本节首先介绍Autoconf/Automake工具的功能以及makefile创建过程中所涉及的文件和命令。最后以一个实例介绍如何使用Autoconf/Automake工具自动创建makefile文件。 Autoconf/Automake工具组简介 Auto...

ruan2012的专栏 224

使用Automake,Autoconf生成Makefile

使用Automake,Autoconf生成Makefile 在Unix上写过程序的人尤其是用 C 来开发程序的人一般都遇到过 Makefile,用 make 来开发和编译程序的确很方便,可是要写出一个Makefile就不那么简单了。GNU Make 那份几百页的文件,让许多人害怕。当然,现在关于make的文档比较多,不过写一个Makefile总是一件很烦人的事情,GNU Autoconf 及 Au

dllbl的专栏 803

autoconf 和automake使用示例

对 mde-1.3.0 中的 configure.in 进行解读dnl Process this file with autoconf to produce a configure script./* dnl 是注释的开头 */AC_PREREQ(2.13)/* AC_PREREQ宏声明本文件要求的autoconf版本 */AC_INIT(mginit/mginit.c)/* configur

ARM Linux and soul 2639

linux下使用automake、autoconf生成configure文件

一、生成configure过程中各文件之间的关系图 二、详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal....

whatday的专栏 1344

使用autoconf和automake创建小项目

用了两天将之前的Snake游戏重新组织了一下,使用autoconf和automake按照GNU的安装软件组织布局重新编译并测试安装通过,第一次做这样的事情,很多知识查了很多资料才弄明白,最后克服了困难,可以把snakes安装到电脑上了。下面就描述一下,希望能帮到其他新手。

lmdyyh5722756的专栏 1314
上一篇: 让键盘代替鼠标
下一篇: vim多窗口使用技巧
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值