makefile入门_包含动态静态库的基础项目_1

最终目标

编译如下工程:cala.c add.c sub.c multi.c,其中,add生成为动态库,sub生成为静态库,multi正常编译

//calc.c
#include <stdio.h>
#include "add.h"
#include "sub.h"
#include "multi.h"
int main(){
    printf("3+5=%d\r\n",add(3,5));
    printf("3-5=%d\r\n",sub(3,5));
    printf("3*5=%d\r\n",multi(3,5));
}

在这里插入图片描述

Makefile基本规则

目标:依赖
<TAB>命令
...

目标是最终要执行的语句块,没有指定目标时,默认第一个。makefile执行每一个目标语句块时,当依赖文件(同时依次检查依赖的依赖)修改时间晚于目标文件时,执行该语句块;当依赖文件不存在时,寻找与依赖相符合的目标,执行相对应的语句。例如,最基本的编译方法:

calc:calc.o add.o sub.o multi.o
	gcc calc.o add.o sub.o mult.o -o calc 
calc.o :calc.c
	gcc -c calc.c -o calc.o
add.o :add.c
	gcc -c add.c -o add.o
sub.o :sub.c
	gcc -c sub.c -o sub.o
multi.o :multi.c
	gcc -c multi.c -o multi.o	

执行Makefile时,如果为指定目标,则将calc视为最终目标,如果calc.o不存在,或者calc.c修改时间晚于calc,依次执行gcc -c calc.c -o calc.o和gcc calc.o add.o sub.o mult.o -o calc 。

Makefile文件名

make:一般指的是GNU Make,是一个软件,时一种用于自动化编译的工具,make工具编译的时候需要一个文件提供编译规则。默认情况下,make命令会在当前目录下依次寻找名为“GNUmakefile”、“makefile”、“Makefile”的文件,也可以通过命令行 -f 或者 --file 指定文件名。
在这里插入图片描述

目标与伪目标

一般情况下,我们会指定一个clean目标,来清理工程中的文件

clean:
	rm calc calc.o add.o sub.o multi.o

当目录下面没有clean文件时,makefile中的clean做为一个标签,可以正常执行;但是,如果当前目录下有clean文件时
在这里插入图片描述
clean被认定为目标,该目标没有依赖,所以永远是最新的,该目标下的指令永远不会被执行。伪目标的作用是将目标转变为一个标签。伪目标的声明那个按习惯放在Makefile开头。

.PHONY:clean

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清欢_小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值