Makefile学习笔记(1)@linux

作者: 云中布衣   分类:  学习笔记    热度: (436℃)   时间: 2017-6-8 15:41   标签: #《Linux程序设计》的那些事    

第一回 初窥make命令与makefile文件

在编写小程序时,许多人都会在编辑完源文件后重新编译所有文件来重建应用程序。但随着程序越来越大,比如多个源文件时,如果存在依赖关系,当修改文件后,重新编译相应的源文件就显得特别的麻烦。比如说你有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,所以就必须重新编译它。但如果修改的是头文件b.h,而程序员又忘记重新编译2.c、3.c,则程序最终可能无法正常工作了。

幸运的是make工具可以使这个问题简化,它会在必要时重新编译所有受改动影响的源文件。

虽然make命令内置了很多的智能机制,但是光凭其本身是无法了解应该如何建立应用程序的。你必须为其提供一个文件,告诉它应用程序应该如何构造,这个文件成为makefile。

1.makefile的语法

makefile文件是由一组依赖关系和规则构成。

每个依赖关系由一个目标(即要创建的文件)和一组该目标所依赖的源文件组成,而规则描述了如何通过这些依赖文件创建目标。(一般来说目标是一个单独的可执行的文件)

2.make命令的选项和参数

make程序本身有许多的选项,其中最常使用的3个选项如下:

-k :让make命令在发现错误时仍然继续执行

-n :让make命令输出将要执行的操作步骤,而不是真正的执行这些操作

-f <filename> :告诉make命令将那个文件作为makefile文件

实验:一个简单的makefile文件

第一步:创建两个c文件,3个头文件:

/*2.c*/
#include <stdio.h>
#include "a.h"
#include "b.h"
void function_two(){
	printf("function_two!!4\n" );
}
/*3.c*/
#include <stdio.h>
#include "b.h"
#include "c.h"

void function_three(){
	printf("function_three!!\n");
}
/*a.h*/
...
/*b.h*/
....
/*c.h*/
....

第二步:创建第一个makefile文件如下,文件名为makefile1:

myapp: main.o 2.o 3.o
	gcc -o myapp main.o 2.o 3.o
main.o: main.c a.h
	gcc -c main.c
2.o: 2.c a.h b.h
	gcc -c 2.c
3.o: 3.c b.h c.h
	gcc -c 3.c
第三步:在终端中执行make命令,下面代表成功执行命令的情况
$ make -f makefile1
gcc -c main.c
gcc -c 2.c
gcc -c 3.c
gcc -o myapp main.o 2.o 3.o

参考资料:《Beginning Linux Programming》 4th Edition Neil Mattew & Richard Stones

(完)

56.8K

发表评论:

© 云中布衣 2015 | Driven by EMLOG  | SiteMap | RunTime: 8.00ms&RSS  |   | 回到顶部

文章数量【230】 评论数量【158】 稳定运行【1089天】

Visitor IP Address【54.224.111.99】