码迷,mamicode.com
首页 > 系统相关 > 详细

linux程序设计——多个源文件带来的问题(第九章)

时间:2015-06-27 09:56:56      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

第九章 开发工具
本章介绍一些linux系统中的程序开发工具,其中一些工具也可以在UNIX系统中使用.linux系统除提供开发人员必须的编译器和调试器外,还提供一组工具,其中每个都可以完成一件独立的任务,并且允许开发人员将它们创造性地组合在一起,而这种组合能力也是linux从UNIX的哲学体系中继承而来的.
9.1 多个源文件带来的问题
在编写小程序时,许多人都会在编辑完源文件后重新编译所有文件来重组应用程序.但是对大型程序来说,使用这种简单的处理方式会带来一些很明显的问题.编辑--编译--测试这一循环的周期将变长.如果仅改动了一个源文件,可能需要重新编译所有的源文件.
如果在程序中创建了多个头文件,并在不同的源文件中包含它们,这种处理方式会带来一个潜在的,更严重的问题.比如说,有3个头文件a.h,b.h,c.h,3个C源文件main.c,2.c和3.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无需重新编译,因为它们并不依赖于这个头文件,而对于源文件3.c来说,因为它包含了头文件c.h,所以在头文件c.h改动后,就必须编译它.如果忘记重新编译,则最终的程序很可能无法正常工作的.
make工具可以解决这个问题,它会在必要时重新编译所有受影响的源文件.
make命令不仅用于编译程序,无论何时,当需要通过多个输入文件来生成输出文件时,可以利用它来完成任务,它的其他用法还包括文档处理(例如针对troff或者TeX文档)
9.2 make命令和makefile文件
虽然make命令内置了很多智能机制,但是光凭自身是无法了解如何建立应用程序的.必须为其提供一个文件,告诉它应用程序应该如何构造,这个文件称为makefile.
makefile文件一般都会和项目的其他源文件放在同一目录下.事实上,如果管理的是一个大项目,可以用多个不同的makefile文件来分别管理项目的不同部分.
make命令和makefile文件的结合提供了一个在项目管理领域非常强大的工具.它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录.
9.2.1 makefile的语法
makefile文件由一组依赖关系和规则构成.每个依赖关系由一个目标(即要创建的文件)和一组该目标所依赖的源文件组成.而规则描述了如何通过这些依赖文件创建目标.一般来说,目标是一个单独的可执行文件.
make命令会读取makefile文件的内容,它先确定目标文件或要创建的文件,然后比较目标所依赖的源文件的日期和时间以决定该采用哪条规则来构造目标.通常在创建最终的目标文件之前,它需要先创建一些中间目标.make命令会根据makefile文件来确定目标文件的创建顺序以及正确规则调用顺序.
9.2.2 make命令的选项和参数
make程序本身有许多选项,其中最常用的3个选项入校所示:
-k:它的作用是让make命令在发现错误时仍然继续执行,而不是在检测到第一个错误时就停下来.可以利用这个选项在一次操作中发现所有未编译成功的源文件.
-n:它的作用是让make命令输出将要执行的操作步骤,而不是真正执行这些操作.
-f <filename>:它的作用是告诉make命令将哪个文件作为makefile文件.如果未使用这个选项,标准版本的make命令将首先在当前目录下查找名为makefile的文件.如果该文件不存在,它就会查找名为Makefile的文件.按照惯例许多linux程序员使用文件名Makefile,因为如果一个目录下都是以小写字母为名称的文件,则Makefile文件将在目录的文件列表中第一个出现.
为了指示make命令创建一个特定的目标(通常是可执行文件),可以把该目标的名字作为make命令的一个参数.

版权声明:本文为博主原创文章,未经博主允许不得转载。

linux程序设计——多个源文件带来的问题(第九章)

标签:

原文地址:http://blog.csdn.net/yiranant/article/details/46653965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!