[Linux]GNU自动化工具(automake工具链)
Filename
:
[Linux]GNU
自动化工具(
automake
工具链)
Version
:
V1.0
Date
:
12/01/2009
Author
:
S.C.Leon <leonsc@126.com>
=====================================================================
GNU
自动化工具(
automake
工具链)
一、
Makefile
介绍
Makefile
是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,
Makefile
中纪录有文件的信息,在
make
时会决定在链接的时候需要重新编译哪些文件
Makefile
的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
二、
GNU
自动化工具
Makefile
的基本结构不是很复杂,但当一个程序开发人员开始写
Makefile
时,经常会怀疑自己写的是否符合惯例,而且自己写的
Makefile
经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,
Makefile
可能还要跟着修改。这样就造成了手工书写
Makefile
的诸多问题。为辅助实现不同编译环境之间的源代码的可移植性,人们创造了
GNU
自动化工具(
autotools
),
autoconf
,
autoheader
,
libtools
,
automake
和其他许多脚本工具一起工作并共同构成了
GNU
编译系统。
使用
automake
,程序开发人员只需要写一些简单的含有预定义宏的文件,由
autoconf
根据一个宏文件生成
configure
,由
automake
根据另一个宏文件生成
Makefile.in
,再使用
configure
依据
Makefile.in
来生成一个符合惯例的
Makefile
。下面我们将详细介绍
Makefile
的
automake
生成方法。
二、使用的环境
本文所提到的程序是基于
Linux
发行版本:
Ubuntu 9.04
(
linux
主流发行版均可),它包含了我们要用到的
autoconf
,
automake
。
三、
helloworld
示例
从最常使用的例子程序
helloworld
开始。
由
helloworld.c
源文件通过
automake
工具链自动生成
Makefile
,最后生成可执行文件的简要步骤如下:
1
)新建三个文件:
helloworld.c
configure.in
Makefile.am
其中
configure.in
和
Makefile.am
是需要我们自己创建的。具体写法详见后文。
2)
然后执行:
aclocal;
autoconf;
automake --add-missing;
./config
相关文档:
到今日,在android平台上调试声音的方面终于有了进展,原来是需要改一个配置文件,目前只是解决了问题,具体原因以后再分析。硬件平台是6410+WM9714,软件平台是ANDROID。现在由于android系统启动时,加载音频服务不成功,处于一个死循环中,老停在登陆界面。此时打印的Logcat信息如下:
......
在最近的一个关于LKML的讨论中,Linus给出了为什么不用C++来写Linux内核的理由:
"In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.
“事实上,我们曾经尝试过用C++来写,是在1992年的时候。很糟糕。相信我--用C++来写内核 ......
此篇文章准备分2个部分来讲述:
第一部分主要详细讲述一下怎么构建一个完成的C++应用扩展模块;
第二部分主要讲述在PHP及Zend框架下怎么使用Zend API和C++语言来实现自己所要的功能以及项目的开发;
此篇文章所运用的环境在Linux
2.4.21-4.ELsmp(Red Ha ......
目前各种Linux发行版都支持UTF-8编码,当前系统的语言和字符编码设置保存在一些环境变量中,可以通过locale命令查看:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPE ......