转自我的博客:http://www.anger6.com/?p=621

在linux环境下通过源码安装程序,我们通常只需要下载源码包,解压,然后执行如下命令:

./configure

make

sudo make install.

之所以能这么easy,背后是autotools的功劳。

使用autotools的基本流程如下:通常我们只需要编写Makefile.am和configure.ac文件。

说了原理,我们再来看一个使用autotools的示例:

if [ -e autodemo ];
then
rm -rf autodemo
fi

mkdir -p autodemo

cat > hello.c <<\
“—————“

include

int main()
{
printf(“hello autotools.\r\n”);
return 0;

}

cat > Makefile.am <<\
“———“
bin_PROGRAMS=hello

hello_SOURCES=hello.c

autoscan
sed -e ‘s/FULL-PACKAGE-NAME/hello/’\
-e ‘s/VERSION/1/’ \
-e ‘s|BUG-REPORT-ADDRESS|/dev/null|’\
AM_INIT_AUTOMAKE’ \
< configure.scan > configure.ac

touch NEWS README AUTHORS ChangeLog
autoreconf -iv
./configure
make distcheck

我们用上面的脚本完成示例的创建。

首先创建一个autodemo目录。

然后通过here文档生成hello.c源文件和Makefile.am.

接着我们运行autoscan命令生成configure.scan,再通过sed将configure.scan中的变量替换成项目相关的内容并输出configure.ac.

我们还加入了AM_INIT_AUTOMAKE这个m4宏用于初始化automake.

然后使用touch创建GNU编程标准的4个文件,否则autotools会罢工。

然后运行autoreconf生成所有需要的文件(Makefile, configure).

make distcheck将产生一个tar文件,内置一个用户需要解包并运行通常的./configure,make,sudo make install所需的所有内容。

我们最多只需要编写2个文件(Makefile.am,configure.ac)就可以生成一套可以在任意linux环境安装的代码和工具。下在讲下Makefile.am,configure.ac

使用Makefile.am来描述Makefile.

Makefile.am聚集于什么需要编译以及它们的相依性,而变量和程序定义将被Autoconf和Automake内置的关于在不同平台编译的知识填充。

Makefile.am包含形式变量和内容变量两种类型的项目。

形式变量

一个需要被makefile处理的文件可能有多种目标,每一种都被automake用一个短字符标注

  • bin

可执行程序的安装路径,例如/usr/bin或者/usr/local/bin.

  • include

头文件安装路径,例如/usr/local/include

  • lib

库安装路径,例如/usr/local/lib

  • pkgbin

如果你的项目名称为project,安装在主程序目录的一个子目录内,例如/usr/loca/bin/project

  • check

当用户键入make check的时候用来测试程序

  • noinst

不要安装,仅用于保存某文件以用于其他目标

automake工具产生make脚本的模板,并且准备了不同的模板:

PROGRAMS

HEADERS

LIBRARIES:静态库

LTLIBRARIES:通过libtool生成的动态库

DIST:需要一起发布的目标,如数据文件

一个目标加上一个模板就等于一个形式变量。如

bin_PROGRAMS:需要构建和安装的程序

check_PROGRAMS:需要构建和测试的程序

include_HEADERS:安装到系统范围的头文件

lib_LTLIBRARIES:通过libtool生成的动态库

noinst_LIBRARIES:不需要安装的静态库

noinst_DIST

python_PYTHON

内容变量

对于编译步骤,automake工具还需要知道更多的细节。如编译目标需要哪些源文件。

bin_PROGRAMS=weahter wxpredict

weather_SOURCES=temp.c barometer.c

wxpredict_SOURCES=rng.c tarotdeck.c

automake的形式变量有效的定义了很多默认规则。例如,链接一个目标文件的规则可能像下面这样:

$(CC) $(LDFLAGS) temp.o barometer.o $(LDADD) -o weather

你可以通过内容变量为每个程序或每个库设定相关变量,如

weather_CFLAGS=-O1

0

AUTOTOOLS工具相关推荐

  1. Linux下autoTools工具集使用介绍

    Author : iStone E-mail : liul.stone@gmail.com Date : 2015-09-19 15:16:38 一 使用autoTools工具集 1.1 什么是aut ...

  2. 如何使用autotools工具

    autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看). autoscan aclocal autoheader automake autoconf 使用au ...

  3. autotools工具使用

    AutoTools 傻瓜入门 学习GNU/LINUX开发的编程人员,上手之后不久就会在编译开源软件的时候碰到configure脚本,过段时间还会知道configure脚本是autoconf生成的:但是 ...

  4. autotools 系列工具安装以及使用方法

    1 安装autotools系列工具 为了生成Makefile需要使用以下工具. autoscan aclocal autoconf autoheader automake 这些工具在autoconf安 ...

  5. ALSA(二), makefile, Autotools, premake

    http://antkillerfarm.github.io/ 从Gstreamer到ALSA(续) 4.SOC_SINGLE类宏 这里对SOC_SINGLE类的宏,详细说明一下,因为只有这些宏才是真 ...

  6. autotools 自动编译系列简介

    autotools安装 1.介绍 Linux环境下,我们编译程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令进行编译操作.这种方式一般是适用于程序文件比较少,组织结构比 ...

  7. LINUX系统程序设计中C/C++编程工具使用

    LINUX系统程序设计中C/C++编程工具使用 一.实验目的 掌握gcc编译器的使用 掌握gdb调试器的使用 掌握make工程管理器的使用 理解Makefile文件的格式,掌握Makefile文件的编 ...

  8. 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)

    一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在此基础上使用dh-make和debuild生成一个可发布的deb程序包,这也是我们在Linux下开发应用程序以及想要发布 ...

  9. Makefile文件自动生成,ubuntu系统autotools使用

    多目录项目用automake和autoconf自动生成Makefile方法 在Linux系统下编写代码,基本上都会遇到Makefile的使用,虽说它对于工程管理有很方便的作用,但对初学者来说要编写出自 ...

最新文章

  1. Java多线课程,java多线程课程.doc
  2. DADA2中文教程v1.8
  3. uplay服务器未响应,《看门狗:军团》存在崩溃丢失存档BUG 育碧正在修复
  4. 将java项目传输到centos7服务端
  5. python绘制3维图-python——绘制二元高斯分布的三维图像,
  6. mac Path had bad ownership/permissions
  7. 【CTF大赛】2021 DASCTF July cybercms 一探再探
  8. Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077
  9. 2019cvpr cv_如何编写软件工程简历(CV):权威指南(于2019年更新)
  10. request 和require区别_合同翻译时如何区分使用request和require
  11. activiti bpmn 安装不上_OTC弧焊工作站问题集-Win7 64位系统安装Step7 MicroWIN
  12. 56. Yii Modules
  13. 通过CloudXplorer打断异常的VHD lease连接
  14. Sim_EKB_Install_2021,TIA V17等西门子资料下载
  15. iphonex 电话没声音 免提却有声音
  16. 平均差误法中存在哪些误差?如何平衡这些误差?|小白心理-312/347考研答疑
  17. w ndows无法连接到System,电脑无法连接到System Event Notification Service服务
  18. 一文读懂ZigBee无线通信技术
  19. 仅键盘洒水还不能证明联想笔记本安全品质
  20. Google earth Engine批量导出影像集合collection

热门文章

  1. ArcMap 字段计算器(Field Calculator)的使用总结
  2. 猪猪猫.CN-WIN2003SP2快速部署12[服务器版]
  3. 为何博客中一些程序和描述有误?
  4. 双软认证是指软件产品登记和软件企业认定
  5. 利用txt索引图像路径或直接对目录下的图像进行逐一测试
  6. [数据库] 理解数据库范式-通俗易懂
  7. antd vue 越过登录直接跳静态页面
  8. 【JetBrain全家桶】使用技巧汇总
  9. 【Go】二、Go流程控制
  10. textarea标签文字换行问题