使用automake

转载过来,自己加工了一点点,留着参考吧:)
使用automake主要会用到aclocal、autoscan、autoconf、autoheader和automake这几个命令。

首先简略的说一下用automake生成makefile的步骤:

(1)创建源代码文件,使用”autoscan”生成configure.scan文件,将其重命名为configure.ac,并做适当修改,然后使用”aclocal”命令生成aclocal.m4文件,使用”autoconf”命令由configure.ac和aclocal.m4文件生成configure文件。
(2)手工编辑Makefile.am文件,使用”automake”命令生成configure.in文件。
(3)手工编辑或由系统给定acconfig.h文件,使用”autoheader”命令生成config.h.in文件。
(4)使用”configure”命令由configure、configure.in和config.h.in文件生成Makefile文件。从而完成Makefile文件的创建过程。

下面用一个经典的hello world的例子说明automake的用法
1.编辑源文件

root@ubuntu:~# mkdir hello
root@ubuntu:~# cd hello
root@ubuntu:~/hello# vim hello.c
root@ubuntu:~/hello# cat hello.c
#include "stdio.h"
int main()
{
printf("hello world\n");
return 0;
}


2.使用Autoscan工具生成configure.ac文件

Autoscan工具用来扫描源代码以搜寻一般的可移植性问题,比如检查编译器、库和头文件等,并创建configure.scan文件,它会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查。

root@ubuntu:~/hello# autoscan          //扫描源文件,生成configure.scan
root@ubuntu:~/hello# ls
autoscan.log  configure.scan  hello.c
root@ubuntu:~/hello# cat configure.scan
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])

# 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

下面给出本文件的简要说明(所有以”#”号开始的行为注释):

(1)AC_PREREQ宏声明本文件要求的autoconf版本,本例使用的版本为2.59。

(2)AC_INIT宏用来定义软件的名称和版本等信息,”FULL-PACKAGE-NAME”为软件包名称,”VERSION”为软件版本号,”BUG-REPORT-ADDRESS”为BUG报告地址(一般为软件作者邮件地址)。

(3)AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。此处为当前目录下的hello.c。

(4)AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。

(5)AC_PROG_CC用来指定编译器,如果不指定,选用默认gcc。

(6)AC_OUTPUT用来设定 configure 所要产生的文件,如果是makefile,configure会把它检查出来的结果带入makefile.in文件产生合适的makefile。使用Automake时,还需要一些其他的参数,这些额外的宏用aclocal工具产生。

此文件只是下面要使用的configure.ac文件的原型,当然我们还要对其做一定的修改:

root@ubuntu:~/hello# mv configure.scan  configure.ac   #将名字改成configure.in也行
root@ubuntu:~/hello# vim configure.ac
root@ubuntu:~/hello# cat configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])               //automake版本
AC_INIT(hello, 1.0, xx@163.com)             //设置软件包信息
AM_INIT_AUTOMAKE(hello, 1.0)               //这个需要手动添加,它是automake必备的宏
AC_CONFIG_SRCDIR([hello.c])                //源文件名
#AC_CONFIG_HEADERS([config.h])           //config.h 文件, 这个地方我们不需要config.h文件所以把它注释掉

# 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工具生成aclocal.m4
aclocal根据configure.ac生成aclocal.m4

root@ubuntu:~/hello# aclocal
root@ubuntu:~/hello# ls
aclocal.m4  autom4te.cache  autoscan.log  configure.ac  hello.c

4.使用autoconf工具生成configure文件
将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。

root@ubuntu:~/hello# autoconf
root@ubuntu:~/hello# ls
aclocal.m4  autom4te.cache  autoscan.log  configure  configure.ac  hello.c

5.生成config.h.in文件

运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,且我们在上面2中已经注释掉了AC_CONFIG_HEADERS([config.h]) ,所以不需要创建“config.h.in”文件。


假如我们没有注释掉,运行autoheader后的状态如下:
[root@localhost main]# 
autoheader
[root@localhost main]# 
ls
aclocal.m4      autoscan.log configure     configure.in~

autom4te.cache 
config.h.in   configure.in hello.c

6.创建Makefile.am文件
Automake工具会根据configure.in中的参量把Makefile.am转换成Makefile.in文件。所以在使用automake之前我们需要自己创建Makefile.am文件

root@ubuntu:~/hello# vim Makefile.am
root@ubuntu:~/hello# cat Makefile.am
AUTOMAKE_OPTIONS=foreign           //软件等级
bin_PROGRAMS=hello                  //可执行文件名
hello_SOURCES=hello.c              //源文件名

其中:

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

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

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

7.使用Automake生成Makefile.in文件

下面使用Automake生成”Makefile.in”文件,使用选项”–add-missing”可以让Automake自动添加一些必需的脚本文件。如下所示:

root@ubuntu:~/hello# automake --add-missing
configure.ac:6: installing `./install-sh'
configure.ac:6: installing `./missing'
Makefile.am: installing `./depcomp'
root@ubuntu:~/hello# ls
aclocal.m4      autoscan.log  configure.ac  hello.c     Makefile.am  missing
autom4te.cache  configure     depcomp       install-sh  Makefile.in

8.执行./configure 生成Makefile

9.测试

root@ubuntu:~/hello# ls
aclocal.m4      config.log     configure.ac  hello.c     Makefile     missing
autom4te.cache  config.status  depcomp       hello.o     Makefile.am
autoscan.log    configure      hello         install-sh  Makefile.in
root@ubuntu:~/hello# ./hello
hello world

使用”make dist”命令将程序和相关的文档打包为一个压缩文档以供发布。

root@ubuntu:~/hello# make dist
root@ubuntu:~/hello# ls
aclocal.m4      config.status  hello             install-sh   missing
autom4te.cache  configure      hello-1.0.tar.gz  Makefile
autoscan.log    configure.ac   hello.c           Makefile.am
config.log      depcomp        hello.o           Makefile.in

hello-1.0.tar.gz为打包过后的文件
 
 

下面是另一种文档结构

|-- conf
|   `-- test.conf
`-- src
    |-- test1.c
    |-- test2.c
    `-- test2.h

src为源文件目录,conf为配置文件的目录。创建Makefile的方式和上面有一点点不同

1.执行autoscan命令

root@ubuntu:~/test# autoscan
root@ubuntu:~/test# ls
autoscan.log  conf  configure.scan  src
root@ubuntu:~/test# cat configure.scan
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/test2.h])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h string.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT 

修改configure.scan为configure.ac

root@ubuntu:~/test# mv configure.scan configure.ac
root@ubuntu:~/test# vim configure.ac
root@ubuntu:~/test# cat configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT(test, 1.0)
AM_INIT_AUTOMAKE(test, 1.0)
AC_CONFIG_SRCDIR([src/test2.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.
AC_CHECK_LIB(pthread, pthread_create)  //pthread为链接库名字, pthread_create为库中的一个函数

# Checks for header files.
AC_CHECK_HEADERS(stdlib.h string.h pthread.h) 

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT([Makefile
		    src/Makefile
		    conf/Makefile])             //每一个目录需要输出一个Makefile文件

2.使用aclocal工具生成aclocal.m4
3.使用autoconf工具生成configure文件
4. 创建Makefile.am
在顶层目录创建的Makefile.am的内容如下

root@ubuntu:~/test# vim Makefile.am
root@ubuntu:~/test# cat Makefile.am
SUBDIRS= src conf

在src目录下创建的Makefile.am内容如下

root@ubuntu:~/test# cd src/
root@ubuntu:~/test/src# vim Makefile.am
root@ubuntu:~/test/src# cat Makefile.am
bin_PROGRAMS= test
test_SOURCES= test1.c test2.c

在conf目录下创建的Makefile.am内容如下

root@ubuntu:~/test/conf# vim Makefile.am
root@ubuntu:~/test/conf# cat Makefile.am
configdir = /etc             //这个数据文件将要移动到的目录
config_DATA = test.conf    //数据文件名,如果有多个文件则这样写config_DATA = test1.dat test2.dat

5.使用Automake生成Makefile.in文件

root@ubuntu:~/test# automake --add-missing
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found

这里出现了一个问题,NEWS, README这几个文件不存在, 那么我们就手工创建他们

root@ubuntu:~/test# touch NEWS README AUTHORS ChangeLog

再次执行automake

root@ubuntu:~/test# automake

6.后面的步骤就和上面的例子一样了

automake使用教程一 1.Ubuntu下安装automake sudo apt-get install automake 将会安装automake相关的工具 2.编辑源文件 vim hello.c 3.执行autoscan Autoscan工具用来扫描源代码以搜寻一般的可移植性问题,比如检查编译器、库和头文件等,并创建configure.scan文件,它会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查。 简要介绍configure.scan文件: AC_PREREQ:声明本 阅读详情

相关推荐

linux: make & autoconf & automake & autoreconf & aclocal

recipe规则的基本定义语法,如上;target是目标文件,编译生成的输出文件。目标也可以是一项操作,比如,经常用到的clean操作。prerequisties,前提条件,就是生成目标文件所需的输入。recipe是make工具要完成的一系列操作。(这里target是output,prerequisties是input,recipe是从input到outpu的一系列操作)

mzhan017的博客 1512

automake简介

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

fangjian1204的专栏 4830

生态学家都在用的MixSIAR:用R语言搞定稳定同位素混合模型(从数据整理到结果解读)

本文详细介绍了生态学家常用的MixSIAR工具,通过R语言实现稳定同位素混合模型分析,从数据整理到结果解读全流程。文章涵盖环境准备、模型构建、参数设置、运行诊断及可视化等关键步骤,帮助研究者科学分析河口鱼类食物来源,适用于生态学研究和湿地保护政策制定。

weixin_28683065的博客 437

了解automake和autoconf(autoreconf)[通俗易懂]

所必须的软件:autoconf/automake/m4/perl/libtool(其中libtool非必须)。autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到 m4,便于生成脚本。automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。

yygr的博客 4410

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 279

AMEsim柱塞泵的建模学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、为什么要对柱塞泵进行仿真?二、Amesim中柱塞泵的模型1.amesim中自己的定排量五柱塞的斜盘柱塞泵2.压力、流量仿真总结 前言 最近在学习Amesim进行柱塞泵的仿真学习,顺便在这里记录我的学习过程,这是我的初衷 提示:以下是本篇文章正文内容,下面案例可供参考 一、为什么要对柱塞泵进行仿真? 柱塞泵是功能和动力学比较复杂的流体机械。而在实际实验中,往往没有条件或者需要对柱塞泵做一些优化,所以需要我们利用仿真...

innocent_cft的博客 8181

autoMake工具使用

1、ac文件总是以AC_INIT开头,以AC_OUTPUT结尾。# 2、AC_INIT()中分别的是: 软件包的名字,版本,作者的联系方式(一般是Email)# 3、添加一行AM_INIT_AUTOMAKE(),里面填入: 程序名字,版本号。# 4、AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。# 5、AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。

m0_71782480的博客 743

线性代数学习笔记(十)——矩阵运算(二)

本篇笔记讲解矩阵的幂运算和矩阵的转置,其中矩阵进行幂运算的前提是矩阵为方阵,矩阵幂运算的两条性质与数的幂运算规则类似;矩阵转置的定义与行列式转置类似,但要注意由于矩阵的行数和列数不同,所以转置之后行数和列数变换。

li2008kui的专栏 1万+

automake 工具使用

最近使用了automake 基本上搞定了,总结一下使用方法。

一个健忘症患者的记忆备份 1420

《Android系统开发中高级定制专栏导读》

欢迎来到【Android 中高级系统定制】专栏!在这里,将深入探讨Android系统开发与定制的方方面面,涵盖从权限管理、驱动开发到系统应用配置等多个领域。

我其实什么都不会 1579

物联网应用开发教程专栏介绍与说明——列表目录查阅(持续更新)

为方便查阅学习本专栏,特整理专栏介绍与说明及提供列表目录便于查阅。阿齐Archie《物联网应用开发教程》专栏。本专栏为物联网应用开发教程,将更新涵盖常见的WIFI、蓝牙、蜂窝网、以太网、Lora、NB-iot等物联网技术实战应用及详解其技术知识。专栏为技术文章,订阅一个文章即可本专栏内所有文章可看,实战开发,亲测无误,附视频演示效果,会持续更新本专栏。本专栏内有理论篇也有完整实战应用篇。

嵌入式阿齐Archie 2万+

automake使用

automake使用   antuomake 流程图: http://blog.youkuaiyun.com/houwei544/article/details/8185916 这个教程不错 https://www.ibm.com/developerworks/cn/linux/l-makefile/使用antuomake工具方法: 以程序add.c为例:准备条件:先makedir一个目录,把需...

bingyu的博客 1663

22、常见加密哈希算法及安全机制解析

本文详细解析了多种常见加密哈希算法,包括SHA系列、RIPEMD、Tiger、HAVAL、Whirlpool等,涵盖其工作原理、安全性与性能对比。同时探讨了哈希攻击方式如预映像攻击和彩虹表,并介绍了盐、MAC、HMAC等防御机制。结合密码存储、消息完整性验证及区块链应用案例,分析了不同场景下的算法选择建议,并展望了哈希算法在创新、融合与标准化方面的未来发展趋势。

seed的博客 391

使用automake编译程序

使用autoconf、automake编译符合自由软件管理的程序

linzx0403的专栏 874

Android 13.0 framework默认沉浸式导航栏功能实现

​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​

安卓兼职framework和app工程师的博客 467

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

automake使用实例

.soconfigure.ac# -*- Autoconf -*- # Process this file with autoconf to produce a configure script.AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION],

小饼仙子的专栏 782

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Ubuntu下automake工具的使用

刚看了automake工具的使用 ,还挺不错 ,在源文件较多时,自己动手写makefile确实显得不太好,不过makefile规则还是要会的 。下面总结一下自己的学习体会 ,以免将来忘了,可以拿来看看,希望大家赐教,本人水平也不咋地(《===》), 就以最简单的程序hello word为例子 ,即有hello.c hello.h两个文件。 1,首先是安装automake工具,用apt-get

Rain Diao的博客 6390

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Automake的使用

进入到你的源码目录 $ cd src $ ls main.c cat main.c # 代码如下: #include <stdio.h> int main(int argc, char** argv){ printf("Hello, Auto Makefile!\n"); return 0; } 开始使用Automake了 执行autoscan $ autoscan $ ls autoscan.log configure.scan main.c 复制

816

automake 使用库文件

**************************************** automake 使用库文件 **************************************** -------------------- 1. 准备素材. -------------------- a. mkdir hello; //创建hello 目录 b. cd hello; mkd...

hjjdebug的专栏 1780

使用Automake 创建和使用静态库

使用Automake 创建和使用静态库 1. 目录结构如下: example |——src 目录(存放源代码文件) |——hello.c |——lib 目录(存放用来生成库的文件) |——test.c 用来生成静态库libhello.a |——includ...

banwh的博客 636

automake的使用

automake生成makefile文件 1、编译参考 参考链接:https://blog.youkuaiyun.com/lee244868149/article/details/42241061(里面存在部分问题,所以参考后面的部分) 链接:(编译文件的生成和文件的修改参考)https://blog.youkuaiyun.com/vevenlcf/article/details/9411109?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160242248819

Eric Long的博客 198

automake安装及使用

/configure 生成 Makefile文件;不成功的话执行 autoreconf -i 之后再重新执行 ./configure。然后将configure.scan 修改为 configure.ac。执行 autoconf 生成 configure 文件。编写Makefile.am文件。首先执行 autoscan。

qq_44861043的博客 2223

如何使用automake

<!-- @page {margin:0.79in} p {margin-bottom:0.08in} --> 如何使用automake 安装(略) 使用步骤 autoscan then rename as configure.ac 这一步主要是用来扫描工程文件夹下的代码文件,生成configure.scan。这个文件中包含了能够

每天多一点 594

automake 的使用(一)

我的实验环境如下: 1:autoconf (GNU Autoconf) 2.69 2:automake (GNU automake) 1.16.1 首先创建一个工程目录,并写一个测试程序,如下所示: qczl@DESKTOP-HP-ZHAN:automake$ ls main.c qczl@DESKTOP-HP-ZHAN:automake$ cat main.c #include <stdio.h> #include <string.h> ...

QCZL_CC的博客 969
上一篇: make笔记
下一篇: Apache Hadoop 版本
「已注销」
博客等级 码龄16年 1粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值