易截截图软件、单文件、免安装、纯绿色、仅160KB

[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


相关文档:

关于Linux的alsa音频问题解决

      到今日,在android平台上调试声音的方面终于有了进展,原来是需要改一个配置文件,目前只是解决了问题,具体原因以后再分析。硬件平台是6410+WM9714,软件平台是ANDROID。现在由于android系统启动时,加载音频服务不成功,处于一个死循环中,老停在登陆界面。此时打印的Logcat信息如下:
......

Linus为什么不用C++写Linux内核?

在最近的一个关于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++来写内核 ......

Linux下C++实现PHP扩展中级应用(一)


此篇文章准备分2个部分来讲述:
    第一部分主要详细讲述一下怎么构建一个完成的C++应用扩展模块;
   
第二部分主要讲述在PHP及Zend框架下怎么使用Zend API和C++语言来实现自己所要的功能以及项目的开发;
    此篇文章所运用的环境在Linux
2.4.21-4.ELsmp(Red Ha ......

在Linux C编程中使用Unicode和UTF 8

目前各种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 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号