Makefile使用

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

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

下面是一些实例:

//main.c #include void fun1(); void fun2(); int main() { fun1(); fun2(); return 0; } //fun1.c #include void fun1() { printf("\nHello from fun1\n"); } //fun2.c #include 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文件。

标签:C/C++, Linux

评论已关闭