AUTOTOOLS工具
转自我的博客: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工具相关推荐
- Linux下autoTools工具集使用介绍
Author : iStone E-mail : liul.stone@gmail.com Date : 2015-09-19 15:16:38 一 使用autoTools工具集 1.1 什么是aut ...
- 如何使用autotools工具
autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看). autoscan aclocal autoheader automake autoconf 使用au ...
- autotools工具使用
AutoTools 傻瓜入门 学习GNU/LINUX开发的编程人员,上手之后不久就会在编译开源软件的时候碰到configure脚本,过段时间还会知道configure脚本是autoconf生成的:但是 ...
- autotools 系列工具安装以及使用方法
1 安装autotools系列工具 为了生成Makefile需要使用以下工具. autoscan aclocal autoconf autoheader automake 这些工具在autoconf安 ...
- ALSA(二), makefile, Autotools, premake
http://antkillerfarm.github.io/ 从Gstreamer到ALSA(续) 4.SOC_SINGLE类宏 这里对SOC_SINGLE类的宏,详细说明一下,因为只有这些宏才是真 ...
- autotools 自动编译系列简介
autotools安装 1.介绍 Linux环境下,我们编译程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令进行编译操作.这种方式一般是适用于程序文件比较少,组织结构比 ...
- LINUX系统程序设计中C/C++编程工具使用
LINUX系统程序设计中C/C++编程工具使用 一.实验目的 掌握gcc编译器的使用 掌握gdb调试器的使用 掌握make工程管理器的使用 理解Makefile文件的格式,掌握Makefile文件的编 ...
- 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)
一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在此基础上使用dh-make和debuild生成一个可发布的deb程序包,这也是我们在Linux下开发应用程序以及想要发布 ...
- Makefile文件自动生成,ubuntu系统autotools使用
多目录项目用automake和autoconf自动生成Makefile方法 在Linux系统下编写代码,基本上都会遇到Makefile的使用,虽说它对于工程管理有很方便的作用,但对初学者来说要编写出自 ...
最新文章
- Java多线课程,java多线程课程.doc
- DADA2中文教程v1.8
- uplay服务器未响应,《看门狗:军团》存在崩溃丢失存档BUG 育碧正在修复
- 将java项目传输到centos7服务端
- python绘制3维图-python——绘制二元高斯分布的三维图像,
- mac Path had bad ownership/permissions
- 【CTF大赛】2021 DASCTF July cybercms 一探再探
- Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077
- 2019cvpr cv_如何编写软件工程简历(CV):权威指南(于2019年更新)
- request 和require区别_合同翻译时如何区分使用request和require
- activiti bpmn 安装不上_OTC弧焊工作站问题集-Win7 64位系统安装Step7 MicroWIN
- 56. Yii Modules
- 通过CloudXplorer打断异常的VHD lease连接
- Sim_EKB_Install_2021,TIA V17等西门子资料下载
- iphonex 电话没声音 免提却有声音
- 平均差误法中存在哪些误差?如何平衡这些误差?|小白心理-312/347考研答疑
- w ndows无法连接到System,电脑无法连接到System Event Notification Service服务
- 一文读懂ZigBee无线通信技术
- 仅键盘洒水还不能证明联想笔记本安全品质
- Google earth Engine批量导出影像集合collection