《Linux程序设计》——读书笔记(2)
Linux环境:
无论操作系统何时启动一个新程序,参数argc和argv都会被设置并传递给main(即使main函数未声明参数,此时只是不能使用这些参数)。这些参数通常由另一个程序提供,一般是shell,它要求操作系统启动该新程序。shell会接受用户输入的命令行,将命令行分解成单词,然后把这些单词放入argv数组。
命令行参数在向程序传递信息方面很有用,很多工具程序使用命令行参数来改变程序的行为或设置选项(这一点我们很熟悉,但是可能很少会联想到正是argc、argv参数在这里发挥作用)。
尽管命令行选项很常用也很有用,但是应注意遵循相同的方式。建议:在应用程序中,所有的命令行开关都以一个短横线开头,其后包含单个字母或数字;如果需要,不带后续参数的选项可以在一个短横线后归并到一起;如果某个选项需要值,则该值应作为独立的参数紧跟在该选项后。
一句话GNU/Linux历史:为了取代Multics系统,Thompson和Ritchie开发了原始的UNIX系统;Richard Stallman为了构建一个任何人可以使用的、免费的类UNIX操作系统,创立了GNU和FSF;Linus Torvalds在Minix基础上创造了Linux内核;最终,Linux和GNU一拍即合,诞生了GNU/Linux操作系统。
BSD是另一个重要的类UNIX操作系统,是GNU/LINUX的有力竞争对手。
由源代码生成可执行文件:
手工编译:gcc命令——不自动、不智能
生成脚本——自动化、不智能
make工具——自动化、智能化
大多数大型的Linux软件项目开发都没有直接使用make,而是使用基于GNU make的“GNU automake/autoconf”工具
Makefile是一个依赖树,从上到下逐级展开。
当项目很庞大时,尽管make依然是一个有力的工具,但是要想维护好Makefile确是十分困难的,因此诞生了GNU自动工具“automake/autoconf”——为生成项目自动生成适当的Makefile文件。
使用automake/autoconf自动工具的最大好处是,可以依据环境自动生成make工具所需的Makefile文件,同时极大的方便了Makefile的后期维护工作。
自动工具的使用:
1.为源代码项目添加三类文件
(1) autogen.sh 运行自动工具的shell脚本(位于项目根目录)
(2) configure.ac autoconf工具的输入文件(位于项目根目录)
(3) Makefile.am 顶层的Makefile模版(项目根目录及有源代码要编译的各级子目录都要有各自的Makefile.am文件)
2.在命令行执行如下命令
# ./autogen.sh
# ./configure
# make
---------------------------------------------------------------------------------------------------------------------------
分步解析:
(1) 运行脚本autogen.sh:建立automake和autoconf工具工作所需要的本地环境;
运行automake工具将Makefile.am文件转换为Makefile.in文件;
运行autoconf工具,将configure.ac文件转化为名为“configure”的纯shell脚本。
(2) 运行脚本configure:收集执行系统的信息;
通过替换步骤将Makefile.in模板转化为实用的Makefile文件(可能是多个Makefile文件)。
(3) 运行make工具:根据生成的Makefile文件对各级源文件进行编译链接,生成最终的可执行文件。
---------------------------------------------------------------------------------------------------------------------------
要体会automake和autoconf工具的优越性,不是一件容易的事,但这确是当今大型开源项目广泛使用的方法。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。