关于Linux下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.h
int addtest(int a, int b);
addtest.c
#include"addtest.h"
int addtest(int a, int b)
{
returna + b;
}
subtest.h
int subtest(int a, int b);
subtest.c
#include"subtest.h"
int subtest(int a, int b)
{
intc = a - b;
returnc;
}
multest.h
int 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.o
main:main.o addtest.o subtest.omultest.o
gccmain.o addtest.o subtest.o multest.o -o main
main.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: clean
clean:
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.c
gcc -c multest.c
gcc -c subtest.c
gcc -c main.c
链接过程
gcc main.o addtest.o subtest.o multest.o -o main
整个过程与Makefile中的过程是一致的。
当然这只是一种理解方式,Makefile的功能之强大又岂是gcc可比拟的。提供这种理解方式的目的就是告诉大家,当你用make操作的时候,总是出错的话,可以使用gcc分步执行,找到出错的地方。