1. 译序
《beginning linux programming 》是一本讲述Linux应用开发的一本挺不错的参考书,目前已经是第四版(2008),由于工作需用到Linux开发,所以在网上找到该书。但目前并没有发现第四版有中文的翻译。所以本人试着翻译了几章内容,现在贡献出来供大家share。
相关下载:
《Beginning Linux Programming 4th Edition》下载在
相关阅读:
Beginning Linux Programming 笔记
2. 第九章 开发工具(Development Tools)
本章介绍在Linux环境中开发程序所用到的工具,其中有一些在UNIX系统中也可使用。除了明显必须的编译调试器以外,Linux提供一个工具集,工具集中的每个工具都完成一项工作,这使得开发者能够创新性的将这些工具组合起来完成工作。这也是Linux继承Unix的思想的表现之一。本章将会学习这些工具和使用工具的具体实例,包括以下几方面:
(1)make命令及makefile文件
(2)源代码控制软件RCS和CVS
(3)写Manual说明页
(4)使用patch和tar分发软件
(5)开发环境
--------华丽的分隔符-----------
多个源文件的问题
当我们写小型程序时,许多开发者可以在修改代码后简单的重新编译他们的程序。但是,当开发大型项目时,这种方法就显现出来问题了。项目的修改-编译-测试周期变长了。即使是最耐心的开发者也难以忍受修改一个文件就要编译整个工程。
一个更加潜在的困难问题是建立了多个头文件,这些头文件包含在不同的源文件中。假设有a.h, b.h以及c.h三个头文件,有main.c 2.c和3.c三个C的源文件(实际项目中请不要使用这样的命名)。你可能会遇到以下的情景:
/*main.c*/ #include "a.h" ... /*2.c*/ #include "a.h" #include "b.h" ... /*3.c*/ #include "b.h" #include "c.h" ...
如果开发者改变了c.h文件,那么main.c以及2.c无需重新编译,这是因为它们都不依赖于c.h。但是3.c因为依靠于c.h所以就需要重新编译。另外,若b.h更改后忘记重新编译2.c文件,那么结果是程序的功能运行不正常。
make工具通过确定文件的更改从而确定有无需要重新编译,所以能解决上述问题。
注:make命令不止用来编译程序,还可以通过输入文件构造输出文件,其他应用包括文档处理(e.g. troff or TeX)。
----------------------华丽的分割线--------------------------------
make命令以及Makefiles
虽然make命令有内嵌的智能,但是仍然不能完全编译您的程序。你必须提供一个文件告诉make命令如何构造您的程序。这个文件就成为makefile.
makefile很多时候都和源代码文件在同一目录里,在任何时候你的电脑上都可以存在多个makefile。实际上,当项目很大时,你可以在项目的不同部分使用不同的makefile。
make命令与makefile的结合为操作项目提供了强大的工具,不仅能够控制源代码的编译,也能用来写manual说明页以及安装程序到某个目录。
Makefile的语法
makefile包含依赖关系以及规则关系。依赖关系根据源代码生成目标文件;规则关系描述了如何从依赖的文件建立目标文件。准确的说,target就是一个可执行文件。
make命令读取makefile,决定如何输出目标文件,然后根据源文件的修改日期决定如何构建目标。通常,先建立中间文件,然后才建立目标文件。make命令使用Makefile决定输出目标文件的次序。
make命令的选项参数
make程序本身有些选项,最常用三种是:
1)-k,使make工具发现错误后不是立即停止,而是对错误之后的源代码文件继续编译。可以使用本选项一次性发现错误。
2)-n,使make工具打印出它要如何编译,但不是真正的编译。