《Linux程序设计》——读书笔记(2)

摘要:
Linux环境:每当操作系统启动新程序时,argc和argv参数将被设置并传递给main。当项目非常大时,尽管make仍然是一个强大的工具,但维护Makefile非常困难。因此,GNU自动工具“automake/autoconf”诞生了,它自动生成用于生成项目的适当Makefile。使用automake/autoconf自动工具的最大优点是,可以根据环境自动生成make工具所需的Makefile,并且极大地方便了Makefile的后期维护。运行脚本configure以收集有关执行系统的信息;转换Makefile。通过替换模板,将其转换为实际的Makefile文件。

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工具的优越性,不是一件容易的事,但这确是当今大型开源项目广泛使用的方法。

免责声明:文章转载自《《Linux程序设计》——读书笔记(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PC游戏领域十年间十大败笔计算机基础第三章:寄存器&内存(Registers&RAM)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux环境依赖库离线安装

离线源码安装包下载地址:http://www.rpmfind.net/linux/rpm2html/search.php?query=net-tools&submit=Search+...&system=&arch= gcc --version;  #检查gcc是否安装g++ --version;  #检查g++是否安装 未安装,...

Linux 基本命令(PuTTy 操作)

1.使用PuTTy连接Linux 2.root用户和普通用户切换 3.系统命令 q:退出 date users who reboot: 重启当前操作的Linux系统 man shutdown :系统关机 poweroff:关闭系统加切断电源 wget:从指定url下载文件 ps top free kill:删除执行的程序或工作 if...

Linux:bashd的环境配置文件

当bash启动时,系统自动调用的文件就是配置文件。 注意:用户自定义的命令别名,自订变量,在退出bash后就会失效。如果,你想保留的话,就要将它们写入配置文件中。 bash配置文件分为:全体系统的配置文件,用户个人偏好的配置文件。 一,login与non-login shell 在输入账户和密码后点击确认获得bash其实就执行了login指令 当在bash...

debian基本操作

debian基本操作 1 给账户添加sudo权限 1、Debian默认没有sudo功能,因此需要自己安装:# apt-get install sudo2、# chmod +w /etc/sudoers3、# vim /etc/sudoers,添加如下行 root ALL=(ALL:ALL) ALL toney ALL=(ALL:ALL) AL...

linux定时重启服务器

需求说明 系统配置低了,且应用程序内一直在执行定时任务,在程序运行一段时间后,发现接口请求会变得很慢,需要每天定时凌晨重启服务器 脚本实现 1. linux 终端输入crontab -e,添加定时任务脚本命令 [root@localhost ~]# crontab -e 2. 在文件末尾追加 0 0 * * * /sbin/reboot; 3. 重...

Linux高性能server编程——定时器

版权声明:本文为博主原创文章。未经博主允许不得转载。 https://blog.csdn.net/walkerkalr/article/details/36869913...