关于linux下make详细用法

时间:2025-04-10 08:26:19

关于make的详细用法,建议网上搜《GNU-Make手册v.》,是一本非常不错的资料,第一章概述给出了基本的make的用法。鉴于上面没有给出实际的例子,我将一个简单的例子列出。

源程序如下:

#include<>

#include""

#include""

#include""

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);


int addtest(int a, int b);

 

#include""

int addtest(int a, int b)

{

 

        returna + b;

}

 

int subtest(int a, int b);


#include""

int subtest(int a, int b)

{

        intc = a - b;

        returnc;

}


int multest(int a, int b);

 

#include""

int multest(int a, int b)

{

        intc = a*b;

        returnc;

}

Makefile书写如下:

 

# sample Makefile

#objects =

main:

        -o main

:

#       gcc-c

:

#       gcc-c

:

#       gcc-c

:

#       gcc-c

.PHONY: clean

clean:

        rmmain


注意:将以上文件放在同一个目录下,直接输入make命令就可以产生 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

gcc -c

gcc -c

gcc -c

链接过程

gcc -o main

整个过程与Makefile中的过程是一致的。

当然这只是一种理解方式,Makefile的功能之强大又岂是gcc可比拟的。提供这种理解方式的目的就是告诉大家,当你用make操作的时候,总是出错的话,可以使用gcc分步执行,找到出错的地方。