Makefile快速入门

来源:互联网 发布:在线课程网络课程 编辑:程序博客网 时间:2024/06/14 16:18

一、先来一个单一文件的例子

1.创建hello.c

#include <stdio.h>int main(){    printf("HelloWorld!\n");    return 0;}


2.编写Makefile
hello : hello.o
    cc -o hello hello.o

hello.o : hello.c
    cc -c hello.c

clean : 

    rmhello.o

 

3.执行make指令,产生可执行文件hello
输出如下:
cc -c hello.c
cc -o hello hello.o

4.可以执行make clean,删除产生的中间文件hello.o
输出如下:
rm hello.o

 

二、Makefile简单介绍

我们写Makefile主要就是为了编译较大规模的程序,得到可执行文件,然而想要得到可执行文件需要经过

    *.c--编译--> *.o --链接--> 可执行文件

    即.c经过编译得到.o文件,.o文件是一个中间文件,再对这些中间文件进行链接最终可得到可执行文件。

 

Makefile书写规则

target ... :prerequisites ... 

                command

                ...

                ...

说明:target就是目标文件,可以是.o文件,也可以是可执行问价,还可以是一个Label(标签)。

           prerequisites就是要生成那个target所需要的文件或者是目标。

          command就是make需要执行的命令(任意Shell命令)。注意:前面要加tab键,不是空格。

 

  这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比 target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则,也就是Makefile中最核心的内容。这是Makefile的主线和核心。

 

三、再来一个简单的Makefile例子

如有一个工程,含有3个头文件及四个c文件,那为了生成所需的可执行文件,这时的Makefile可以这样写:
test:main.o t1.o t2.o t3.o

     gcc –o test main.o t1.o t2.o t3.o

main.o:main.c

     gcc –c main.c

t1.o:t1.c t1.h

     gcc –c t1.c

t2.o:t2.c t2.h

     gcc –c t2.c

t3.o:t3.c t3.h

     gcc –c t3.c

clean:
     rm test main.o t1.o t2.o t3.o

到这里一个简单的makefile就写好了,把它的名字保存为Makefile就可以了,这时你只要在终端敲一下make,它就自动帮你编译链接了,如果敲入make clean,它将删掉那些中间文件及可执行文件。

 

四、实战

       1.创建一个文件夹calc存放计算器项目

       2.创建文件

创建mul.c文件

int mul(int a, intb){    return a * b;}

创建sub.c文件

int sub(int a, intb){    returna - b;}

创建add.c文件

int add(int a, intb){    return a + b;}

创建dive.c文件

int dive(int a,int b){       return a / b;}

创建common.h文件

#ifndef__COMMON_H__#define__COMMON_H__int mul(int a, intb);int sub(int a, int  b);int add(int a, int b);int dive(int a, int b);#endif//__COMMON_H__

创建main.c文件

#include<stdio.h>#include"common.h" int main(void){   printf("%d\n", add(5, 3));   return o;}

编写Makefile文件

calc:add.o sub.odive.o mul.o main.o
        gcc add.o sub.o dive.o mul.o main.o -o calc

add.o:add.c
        gcc -c add.c
sub.o:sub.c
        gcc -c sub.c
dive.o:dive.c
        gcc -c dive.c
mul.o:mul.c
        gcc -c mul.c
main.o:main.c
        gcc -c main.c

 

0 0
原创粉丝点击