`
xitong
  • 浏览: 6205733 次
文章分类
社区版块
存档分类
最新评论

Makefile使用

 
阅读更多

make能作为工程管理器,把不同的源文件进行编译链接到一个工程。make每次读取的都是Makefile,它也就是普通的文本文件,只是它有它自己的语法。make主要通过时间戳的原理来进行管理工程。比如main.c的文件总是会main.o的文件更旧,因为main.o是依赖于main.c而产生的。一旦出现main.c的文件比main.o时间还新,那说明main.c肯定是被更新了,这个时候make就会把该文件重新编译。

make能把工程实现模块化,一个大的工程也许包含了很多的源文件,每次完整编译的话会很浪费时间。程序员修改了一个模块的源文件,只需要把这个模块重新编译链接进到整个工程即可。效率很高,原理就是上面的时间戳比较。

下面是一些实例:

//main.c
#include <stdio.h>

void fun1();
void fun2();

int main()
{
    fun1();
    fun2();
    return 0;
}

//fun1.c
#include <stdio.h>

void fun1()
{
    printf("\nHello from fun1\n");
}

//fun2.c
#include <stdio.h>

void fun2()
{
    printf("Hello from fun2");
}

下面是编辑Makefile文件

[firefox@fire Make_Test]$ vim Makefile

#target : dependency_files
#	command 

main : main.o fun1.o fun2.o
	gcc -o main main.o fun1.o fun2.o

main.o : main.c
	gcc -o main.o -c main.c

fun1.o : fun1.c
	gcc -o fun1.o -c fun1.c

fun2.o : fun2.c
	gcc -o fun2.o -c fun2.c


接着输入make,就会自动去读取Makefile文件,按照指定的语法进行执行。
[firefox@fire Make_Test]$ make
gcc -o main.o -c main.c
gcc -o fun1.o -c fun1.c
gcc -o fun2.o -c fun2.c
gcc -o main main.o fun1.o fun2.o

要是更新了fun1.c,make就仅仅会重新编译fun1.c,然后重新链接所有.o文件。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics