开发者社区> 异步社区> 正文

《C程序设计新思维》一第1章 准备方便的编译环境1.1 使用包管理器

简介:
+关注继续查看

本节书摘来自异步社区《C程序设计新思维》一书中的第1章,第1.1节,作者 【美】Ben Klemens,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 准备方便的编译环境

C程序设计新思维
小心啦,亲爱的,因为我要用点技术。

——选自Iggy Pop的歌曲“Search and Destroy(寻找与毁灭)”
仅仅有C标准库是不足以成就大事的。

实际上C的生态环境已经扩展到了C标准之外,也就是说,如果你想顺利完成本书的练习(即“自己动手”),你就必须了解如何轻松调用那些常用却并非ISO标准的库。不幸的是,这一点恰恰被多数教科书所忽略掉,而需要你自己去寻求解决办法。这也是为什么你发现C的诽谤者们会告诉你一些自相矛盾的言论,比如C已经有40年的历史了,所以你必须自己完成程序的每个部分——他们恐怕根本从来没真正连接过一个库。

本章概要如下:

安装必要的工具。比起那些必须自力更生地寻找每个组件的黑暗时代,现在我们身处的环境要好多了。只要10到15分钟(外加下载这些好东西的时间)你就可以安装好一个完整的开发环境。
如何编译一个C程序。你其实已经知道了怎么做这事儿,但是我们需要一个可以调用库和它们的位置路径的配置;仅仅输入cc myfile.c并不会解决这个问题。make命令是用来提供用于编译程序的最简单的系统,因此它提供了一个好的讨论模型。在这一部分我将展示给大家一个“最小巧但可用”的makefile,并提供了扩展的空间。
无论我们用什么系统,我们都会基于组来讨论环境变量,讨论这些环境变量是做什么的,以及如何配置它们。而当我们准备好了所有的编译机制之后,就会面临一个最容易的环境配置调整问题,即添加新的库。
作为一个附加内容,我们可以用至此学习的知识,准备一个相对简单的编译系统,并将允许我们剪切和粘贴代码到命令行。
针对IDE用户,有一点需要特别说明:你可能不会去使用make命令,但并不因此就说这一章和你没有关系。因为在任何编译方法中make命令都会被执行,所以IDE环境也有一个类似的方法。如果你知道make命令是如何工作的,将更加容易去配置IDE环境。

1.1 使用包管理器

嘿,老兄,如果你还没有在使用包管理器的话,那你可真的错过了好东西。

有几个原因促使我讲述包管理器。

首先,你们中的一些人可能连基本的包管理工具都没有安装。为了这部分读者,我把这部分放在本书的最开始,因为你们需要尽快得到这些工具。一个好的包管理器将为你快速安装POSIX子系统、任何你听说过的语言的编译器、游戏、常用的办公室效率工具,以及几百种C库,等等。

其次,作为一个C程序员,包管理器是我们用来安装常用工作库的关键手段。

再次,当你写过一定的代码,你将开始渴望发布你的代码,从而完成一个从包的下载者到包的贡献者的嬗变。本书将送你一程,为你讲解怎么为自动安装过程准备安装包,这样当一个包库的管理者决定在包库中包含你的代码的时候,他也能顺利地制作最终的包。

如果你是一位Linux用户,你的计算机已经带了包管理器,而且你已知道使用它获取软件是多么容易。对于Windows用户,我将详细讲解Cygwin。Mac用户有几种选择,比如Fink和Macports。所有的Mac下的包管理器都依赖于Apple的Xcode包,也就是一般在系统安装光盘中所使用的(或者含有安装程序的目录,视情况而定),或通过注册为Apple的开发者而得到。

有了包管理器,那么我们需要什么包呢?这里有一个常见的列表。因为每个系统有不同的组织模式,他们中的一些可能也是以不同的方式组合起来的、作为基本包默认安装的,或者有着奇怪的名字。如果你对一个包不是很确定,不妨下载下来安装一下,毕竟系统由于安装了太多的软件包导致不稳定或者变慢的时代已经过去。不过,你可能没有足够的带宽(或者甚至没有足够的硬盘空间)来安装每个可以找到的包,所以还是需要一点判断和选择的。要是你发现错过了什么东西,随时可以折返回来寻找。必须准备的包如下。

一个编译器。gcc是必须安装的;也可能需要Clang。
gdb,一个调试器。
Valgrind,以便测试你的C内存使用错误。
gprof,一个代码剖析器。
make,这样你就再也不用直接调用编译器了。
pkg-config,用来寻找库。
Doxugen,用来产生文档。
一个文本编辑器。理论上说你可以有几百种选择。这里,笔者推荐几种:
——Emacs和vim是那些死硬的极客们喜欢的工具。Emacs是包罗万象的(E代表extensible,扩展);vim则相对采取最简化主义思路并且对键盘输入者比较友好。如果你觉得自己可能会花费上百小时盯在一个文本编辑器上,那么花点时间了解一下它们是值得的。
——Kate的界面是友好而吸引人的,还提供了一些程序员们所期望拥有的便利工具,比如语法高亮检查。
——最后建议你试一下nano,该工具非常简约,并且是基于文本界面的,以至于你连一个GUI[1]界面都不需要。
如果你钟情于IDE,那就安装一个——甚至可以同时安装几个。这方面你同样有很多选择:
——Anjuta:属于GNOME项目。与GNOME的GUI工具Glade可以兼容工作。
——KDevelop:属于KDE项目。
——Code::block:相对简单,在Windows环境下运行。
——Eclipse:简直就是有很多杯托和把手的豪车。并且是跨平台的。
还有一些软件你应该安装,这些工具在随后的几章里我们会频繁用到:

Autotools:Autoconf、Automake、libtool
Git
shell的替代品,比如Z shell。
当然,还有C库这些库可以使你免于“重新发明轮子”的麻烦(或者,用更加精确的比喻:重新发明火车头)。你可能想要更多的库,但是本书所使用的一般也就限于如下几种:

libcURL
libGlib
libGSL
libSQLite3
libXML2
C库包的命名机制并没有统一标准,所以你必须弄清楚你的包管理器把一个库打进子包的习惯。典型的习惯是,一方面为最终用户准备一个包,另一方面同时为将要在自己程序里使用这些库的开发者也准备一个包;所以要确认选定了基本包和-dev或-devel的包。有的系统把文档也分散进一个单独的包中。也有的要求你单独下载调试符号表。而且一旦需要,gdb工具将在第一次运行并在发现你缺少调试符号表的时候引导你逐步完成。

如果你正在使用POSIX系统,那么完成前面的工具安装后,你已经拥有一个完整的开发系统,可以进入编程阶段了。对于Windows用户,我们将简短说明一下这个安装的系统是如何与Windows主系统互动的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )(一)
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )(一)
46 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 27 章 恢复配置_27.3. 后备服务器设置
27.3. 后备服务器设置 standby_mode (boolean) 指定是否将PostgreSQL服务器作为一个后备服务器启动。如果这个参数为on,当到达已归档 WAL 末尾时该服务器将不会停止恢复,但是将通过使用restore_command获得新的 WAL 段以及/或者通过使用primary_conninfo设置连接到主服务器来尝试继续恢复。
1454 0
让程序使用自带的字体文件
转载请说明原出处,谢谢~·http://blog.csdn.net/zhuhongshu/article/details/39396223         我笔记本使用的是win7系统,开发的duilib程序一直都使用微软雅黑字体,昨天在xp系统下测试时发现由于xp下没有微软雅黑字体而导致duilib使用了默认的宋体字,瞬间感觉界面不协调了。
966 0
DNN 360 Sidemenu某些Vertical Menu不显示管理菜单的解决办法
在使用http://www.dnn360.net/的Sidemenu时,有一些Vertical Menu无法显示Admin和Host下的子菜单(因为Admin和Host这两个Tab是设置为unable的。
640 0
软件开发外包管理的“一二四”
本文讲的是软件开发外包管理的“一二四”,在信息化整个生命周期中,企业都越来越依赖于外部供应商,从需求分析到系统选型,再到项目实施乃至最后的运行维护,IT供应商始终与企业如影随形。
2701 0
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )(二)
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )(二)
57 0
编程实战——电影管理器之XML存储电影信息数据
但凡管理器之类的软件,存储数据是必不可少的。存储数据的话,有几种选择。一是用数据库,把数据存储到数据库里;一是用文本文件,把数据存储到文本文件里;一种是利用XML文件,把数据对象转换为XML后,存储到XML文件(实际上也是文本文件)。
753 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载