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

《Linux程序设计》——读书笔记(2),布布扣,bubuko.com

时间: 2025-01-07 09:06:48

《Linux程序设计》——读书笔记(2)的相关文章

《演讲之禅:一位技术演讲家的自白》读书笔记

<演讲之禅:一位技术演讲家的自白>读书笔记 第1章 其实我看不到裸露的你 要知道你怎么对待错误,听众就会怎样对待错误: 你可以泰然处之,大家也就一笑而过:如果你大惊失色,大家同样会将注意力集中到这件事上: 因此,如果我在费城的下一个演讲时鞋子着火了,或者上楼梯时摔倒了,还在走道上摔了个嘴啃泥,我就可以将这些变成机遇. 以后要是发生什么还不及这个故事尴尬的事情时,我就可以拿这个故事说事了.我可以以一个灾难作为逃脱另一个灾难的衔接点了:"你认为这很令人尴尬吗?呃,以前我在费城的时候--&

[读书笔记]曾国藩的正面与侧面

对许多人来说,曾国藩的主要意义证明了一个资质平平的人,在意志力的推动下,可以达到什么样的高度. 蔡元培评论过这些掌握着大权的腐儒:"自汉以后,虽亦思想家辈出,而其大旨不能出儒家的范围,惟用哲学以推测一切事物,往往各家悬想独断--这种哲学,没有科学作前提,永远以圣言量为标准,而不能出烦琐哲学的范围,整整四千年的中国教育,除了有过科学的萌芽及玄学曾成功地站住脚外,可以说,在实际上丝毫没有受到外来影响,它仅仅发生了从简单到复杂的变化." 老曾说的"天下无一成不变之君子,无一成不变之

读书笔记:《史蒂夫乔布斯传》

读书笔记:<史蒂夫乔布斯传> <乔布斯传>这本书在乔布斯去世后不久就出版了,当时我正在西安出差,看到书店的一则 大型的促销广告,上面印着乔布斯的大型头像,说是2011年10月XX日正式首发,进书店转了一圈竟然发现了一本乔布斯传已经摆在一个醒目的书架上,封面 竟然与广告上的非常相似,查询后明白得到正规授权的传记应该是Walter Isaacson所著的,其它的都是水货. 为了对Jobs保持一定的神秘感,一直没有买入这本书.3月的某一天在陪孩子在书店闲逛时还是忍不住下手了,标价68元,

自然语言处理一些读书笔记和自己的思考。

在知乎上搜索相关问题,有人推荐<数学之美>,之前粗略看过一次,这次想重新看一下并且做个读书笔记.下面是关于自然语言理解方面的一些读书笔记和自己的思考. 一. 自然语言处理历史: 自然语言处理最初发展的20多年里,相关科学家都极力通过电脑模拟人脑,试图用这种方式来处理人类语言,但是这种方式被证明是行不通的,成功几乎为零.NLP发展的第二阶段是70年代之后,科学家们终于找到了基于数学模型和统计的方法. 第一阶段的时候,学术界对人工智能和自然语言理解的普遍认识是:要让机器完成翻译或者语音识别等等,必

2016寒假读书笔记2-----20135204

假期读书笔记-----<那莲.那禅.那光阴>作者:雪小禅 20135204  郝智宇 这本书是自买来之后一直很喜欢的书,有次同窗表达了对这本书的喜欢我却因为太珍视而没有割爱.高三的时候忙里偷闲读了一部分,大学里时不时翻看,都会觉得内心得到宁静. 初中时盛行的郭敬明韩寒之流我也未多读过他们的作品,作为一名(伪)文青,当时更中意的是安意如的书,彼时觉得文章深美有意蕴,算是在同类型中更胜一筹.后来却不爱了,因为觉得其文更有刻意之感,三观也不够正.反而更偏爱雪小禅. 雪小禅的文更加大气,关于情感,关于

读书笔记:《遇见未知的自己》

读书笔记:<遇见未知的自己> <遇见未知的自 己>是看着某个人的书单没有经过考虑而购买的,拿到书后看着封面,再看看前几页的介绍,感觉非常适合女人去读,老婆下班之后整天看电视.看电影,经常怨声 载道的向我唠叨诉苦,于是就把这本书扔给老婆去看了,看看她有什么反应.2天后她把书拿了回来,没有任何的反馈,可能一本书中会有几段对她产生点影响吧, 或者她就是随手翻了几页.(2012年12月1日又看了一遍,发现这半年多媳妇还是有些变化,报怨比以前减少了,可能我自己也在改变,当自己的心态发生积极的

斯蒂芬&#183;乔布斯-读书笔记2

摘要:此文记录了本人阅读乔老爷子传记过程中的一些感想,以及个人觉得比较好的内容.仅供参考. 原文:“1958年,IBM错过了收购一家羽翼未丰的公司的机会.这家小公司发明了一种称为静电复印的新技术.两年后,施乐公司诞生了,IBM从此追悔莫及.”今到了1984年.IBM想占有一切.苹果被视做唯一能够与之抗衡的希望.经销商最初张开双臂欢迎IBM,现在他们害怕IBM主宰和控制未来,他们回到了苹果的怀抱,认为苹果能够保障自己在未来的自由.IBM想占有一切,苹果是它控制整个产业的最后一道障碍,它正把枪口指向

《平凡的世界》读书笔记

<平凡的世界>读书笔记 本篇oi无关,人生相关 这本书是真的好看,一个人处世的态度真心很重要,希望我不忘初心吧qwq 这本书是我在春节拜年时看完的.这期间只过了短暂的一周,但思想已经越过了十多个年头.文中的一个个人物都是那么鲜活,都有各自鲜明的特点,给我带来了深刻的思考与心灵上的回响.<平凡的世界>给我展示一个不平凡的世界,每个角色都或多或少给了我启示与感想.但我想法有太多并且大部分也过于朦胧,本人文笔也很粗糙,只能尽力来表达自己内心的一些想法. 其中给我最深刻的感受大概是个人与时

《C#图解教程》读书笔记之三:方法

本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头-指定方法的特征,方法体-可执行代码的语句序列: (2)方法的调用:参数.值参数.引用参数.输出参数.参数数组: ①参数: 形参-本地变量,声明在参数列表中:形参的值在代码开始之前被初始化: 实参-实参的值用于初始化形参: ②值参数: 为形参在栈上分配内存,将实参的值复制到形参: ③引用参数: 不为形参在栈上分配内存,形参的参数名作为实参变量的别名指向同一位置,必须使用ref关

《C#图解教程》读书笔记之五:委托和事件

本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执行它所"持有"的方法.如果从C++的角度来理解委托,可以将其理解为一个类型安全的.面向对象的函数指针. (2)如何使用委托? ①声明委托类型(delegate关键字) ②使用该委托类型声明一个委托变量 ③为委托类型增加方法 ④调用委托执行方法 (3)委托的恒定性: 组合委托.为委托+=增加