make/Makefile的用法

make/Makefile:

1. make

make是一条命令

2. makefile

Makefile 是一个文件,两个搭配起来使用,完成项目自动化处理

3. make/Makefile的作用:

  • 1.一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,而Makefile定义了一系列的规则来制定。 哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于一些更为复杂的功能操作,因为Makefile就像是一个shell脚本一样,其中也可以执行操作系统的命令。
  • 2.Makefile的好处——“ 自动化编译 ”。一旦写好,只需要一个make命令,整个工程完成自动化编译,极大的提高了软件开发的效率。
  • 3.make是一个命令工具,是一个解释Makefile中指令的命令工具。

下面我们写一个计算器 math ,其中包含的文件有: add.c add.h sub.c sub.h mul.c mul.h div.c div.h main.c Makefile

代码:

add.c

#include "add.h"                                                                

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

add.h:

#ifndef __ADD_H__                                                               
#define __ADD_H__

int add(int a,int b); 

#endif /// __ADD_H__

sub.c

#include "sub.h"                                                                

int sub(int a,int b)
{
    return a - b;
}

sub.h

#ifndef __SUB_H__                                                               
#define __SUB_H__

int sub(int a,int b); 

#endif /// __SUB_H

mul.c

#include "mul.h"                                                                

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

mul.h

#ifndef __MUL_H__                                                               
#define __MUL_H__

int mul(int a,int b); 

#endif /// __MUL_H                       

div.c

#include "div.h"                                                                

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

div.h

#ifndef __DIV_H__                                                               
#define __DIV_H__

int div(int a,int b); 

#endif /// __DIV_H

这里写图片描述

sub.c sub.h mul.c mul.h div.c div.h 类似于add.c add.h

main.c

#include <stdio.h>

#include "add.h"                                                                
#include "sub.h"
#include "mul.h"
#include "div.h"

int main()
{
    int a,b;

    printf("input a b : ");
    scanf("%d %d",&a,&b);

    printf(" %d + %d  = %d\n",a,b,add(a,b));
    printf(" %d - %d  = %d\n",a,b,sub(a,b));
    printf(" %d * %d  = %d\n",a,b,mul(a,b));
    printf(" %d / %d  = %d\n",a,b,div(a,b));
}

makefile的三种写法:

目标文件:依赖文件

tab命令 gcc 依赖文件 -o 目标文件

其中 $^代表依赖文件,$@代表目标文件。
  • 第一种:
main : main.o add.o sub.o mul.o div.o
        gcc main.o add.o sub.o mul.o div.o -o main
add.o : add.c
        gcc -c add.c -o add.o
sub.o : sub.c
        gcc -c sub.c -o sub.o
mul.o : mul.c
        gcc -c mul.c -o mul.o
div.o : div.c
        gcc -c div.c -o div.o                                                   
main.o : main.c
        gcc -c main.c -o main.o
clean:
        rm -rf *.o

这里写图片描述
第二种:

main:main.o add.o sub.o mul.o div.o 
        gcc $^ -o $@
%.o : %.c 
        gcc -c $^ -o $@
clean:
        rm -rf *.o       

这里写图片描述
第三种:

.PHONY:clean main                                                               

main:main.o add.o sub.o mul.o div.o 
        gcc $^ -o $@
%.o : %.c 
        gcc -c $^ -o $@
clean:
        rm -rf *.o

这里写图片描述

1.其中clean:
        rm -rf *.o  的意思是:去掉所有带有 .o 的文件
2. .PHONY:clean main的使用(使第一次make后,make clean后,不用更新Makefile文件,也能执行main) ;如果没有这句话,不更新Makefile的情况下,第二次make,则会出现
“main”是最新的。    

第一.二种Makefile,make后的结果:

这里写图片描述

第三种Makefile,make后的结果:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37941471/article/details/79796838