Welcome

首页 / 软件开发 / 数据结构与算法 / 提前认识软件开发(17) makefile文件的书写及应用

提前认识软件开发(17) makefile文件的书写及应用2015-01-24makefile用于Linux下整个工程的编译,对于Linux下的C/C++语言的编译是至关重要的。

本文以实际的C源程序为例子,介绍如何使用makefile来编译Linux下的C语言工程,为相关开发工作的开展提供了参考。

一、什么是makefile?

makefile是什么?如果你写的程序只是在Windows下运行,那么很有可能不知道有这个玩意儿。而如果你要在Linux下编译并运行程序,那么你几乎不可避免地要和makefile打交道。

makefile是一个文件,里面定义了一系列的规则来指定一个工程中的哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更为复杂的功能操作。简单点说,makefile就是Linux下的一个编译调度器。

二、makefile的语法规则

既然是一个编译调度器,那么它就会有自己的一套规则。makefile的规则如下:

target ... : prerequisites ...command............
说明:

(1) target就是一个目标文件,也就是在这个步骤中,我们想要输出的文件名(可以包括后缀)。

(2) prerequisites是要生成那个target所需要的文件,相当于在Windows工程下我们要得到exe文件所需要的源代码文件。

(3) command是make需要执行的命令,也就是如何利用prerequisites来生成target。注意,command行要以TAB键开头。

三、C程序源代码

本文以一个实际的Linux下的C程序工程为例,介绍makefile的编写方法及用法。

本文中的程序实现将一个字符串中的小写字母转换成大写字母的功能。有两个头文件:TestMakeFileMore1.h和TestMakeFileMore2.h,放在“head”目录下;有两个源文件:TestMakeFileMore1.c和TestMakeFileMore2.c,分别放在“exec1”和“exec2”目录下。

该工程TestMakeFileMore的组织形式如图1所示(“release”目录用于存放生成的文件)。

图1 该工程的组织形式

1. “TestMakeFileMore1.h”文件代码内容

/*********************************************************************** 版权所有 (C)2014, Zhou Zhaoxiong。** 文件名称: TestMakeFileMore1.h* 文件标识:无* 内容摘要:将输入字符串中的大写字母变成小写字母* 其它说明:无* 当前版本: V1.0* 作者: Zhou Zhaoxiong* 完成日期: 20140430** 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容* 修改日期: 20140430* 版本号: V1.0* 修改人: Zhou Zhaoxiong* 修改内容:创建**********************************************************************/#ifndef _TESTMAKEFILEMORE1_H_ // 防止头文件被重复引用#define _TESTMAKEFILEMORE1_H_ #include <stdio.h>#include <stdlib.h>#include <string.h> // 重新定义数据类型typedef unsigned charUINT8;typedefint INT32;typedef unsigned int UINT32;#endif