首页 / 操作系统 / Linux / 关于Linux下Make详细用法
关于make的详细用法,看看《GNU-Make手册v.380.pdf》(下载在http://www.linuxidc.com/Linux/2011-08/41511.htm),是一本非常不错的资料,第一章概述给出了基本的make的用法。鉴于上面没有给出实际的例子,我将一个简单的例子列出。源程序如下:main.c#include<stdio.h>#include"addtest.h"#include"subtest.h"#include"multest.h"int main(void){ inta = 6, b = 8; intadd,mul,sub; add= addtest(a,b); mul= multest(a,b); sub= subtest(a,b); printf("add= %d,mul = %d,sub = %d",add,mul,sub); return0;} int addtest(int a, int b);
addtest.hint addtest(int a, int b); addtest.c #include"addtest.h"int addtest(int a, int b){ returna + b;} subtest.hint subtest(int a, int b);
subtest.c#include"subtest.h"int subtest(int a, int b){ intc = a - b; returnc;}
multest.hint multest(int a, int b); multest.c#include"multest.h"int multest(int a, int b){ intc = a*b; returnc;}Makefile书写如下: # sample Makefile#objects = addtest.o subtest.omultest.omain:main.o addtest.o subtest.omultest.o gccmain.o addtest.o subtest.o multest.o -o mainmain.o: addtest.h subtest.hmultest.h# gcc-c main.c addtest.o: addtest.h # gcc-c addtest.c addtest.h multest.o: multest.h # gcc-c multest.c multest.h subtest.o:subtest.h # gcc-c subtest.c subtest.h .PHONY: cleanclean: rmmain addtest.o subtest.o multest.o
注意:将以上文件放在同一个目录下,直接输入make命令就可以产生 subtest.o addtest.o multest.o main这四个文件,再输入./main 就可以得到结果。在整个调试过程中可能会出现以下几个错误,现在列出来,希望对你有用:(1)出现__gxx_personality_v0的错误。这是由于代码的源代码与后缀名不符合造成的。因为有时候我们是在visual下编写的程序,是以.cpp结尾的,当在linux下使用gcc编译时,就会出现这个错误。解决方法就是:将.cpp结尾的更改为.c结尾即可。 (2)当出现"main" is up to date时(这儿的main是最终生成的文件,不是程序中main的 意思哦),说明文件没有改动,文件是最新的;而此时,我们还想再make应该如何做呢?解决方法:删除目录下.o文件 即 rm *.o. (3)当更改一个文件后,make仅仅执行更改的这个文件,其他并不执行,执行过程在make之后显示。(4)重要提示: Makefile 可以理解为是gcc分步执行的一个汇总(这是我个人的理解),因为我们用gcc编译链接这个程序的过程如下:编译过程gcc -c addtest.cgcc -c multest.cgcc -c subtest.cgcc -c main.c链接过程 gcc main.o addtest.o subtest.o multest.o -o main整个过程与Makefile中的过程是一致的。当然这只是一种理解方式,Makefile的功能之强大又岂是gcc可比拟的。提供这种理解方式的目的就是告诉大家,当你用make操作的时候,总是出错的话,可以使用gcc分步执行,找到出错的地方。