C语言学习(零)——linux标准C下makefile文件的编写

零、前言

  make相当于一个集成管理器,用于分析依赖于被依赖关系。在工程管理的时候可以把主动权交给用户,所以程序员一般通过Makefile文件来管理工程。
  比如说,一个成规模的工程项目一般由很多部分组成,一般会将项目分解,因为如此多的文件,仅使用gcc,是非常难办的。但是我们写一个Makefile的话,整体就会变得清晰很多。
在这里插入图片描述
比如上图,目标是获得project的3个大功能,每个大功能分为3个小功能,每个小功能由3个file.c实现。如果通过Makefile连接的话,该如何写呢??

一、开始编写

首先新建文件: touch main.c tool1.c tool1.h tool2.c tool2.h
vim * -p 使用gt切换标签页。

第一种写法

那么首先,我们要知道,Makefile中其实是使用的shell语言,可以这样编写:
vim makefile

mytool:main.o tool1.o tool2.o			// mytool是即将编译生成的文件	
	gcc main.o tool1.o tool2.o - o mytool
main.o:main.c
	gcc main.c -c -Wall -g -o main.o 		// 编译main.c生成main.o
tool1.o:tool1.c
	gcc tool1.c -c -Wall -g -o tool1.o
tool2.o:tool2.c
	gcc tool2.c -c -Wall -g -o tool2.o
clean:
	rm *.o mytool -rf
  • make
    make已是最新
    make会自动检查文件的新旧程度,文件最新则不重新进行编译

第二种写法

初版虽然可以运行,但是太长了,过于笨重,而且容易出错;可以使用shell的赋值语句,把gcc替换掉

OBJS=main.o tool1.o tool2.o
CC=gcc
CFLAGS+=-c -Wall -g
mytool:$(OBJS)
	$(CC) $(OBJS) -o mytool
main.o
	$(CC) main.c $(CFLAGS) main.o
tool1.o:tool1.c
	$(CC) tool1.c $(CFLAGS) tool1.o
tool2.o:tool2.c
	$(CC) tool2.c $(CFLAGS) tool2.o
clean:
	rm *.o mytool -rf

这样的写法虽然看起来规整了不少,但还是太长,不太美观,通过观察,可以发现后三种编译方式看起来类似,那么就可以将其合并。

第三种写法

OBJS=main.o tool1.o tool2.o
CC=gcc
CFLAGS+=-c -Wall -g 			// 编译选项

mytool:$(OBJS)
	$(CC) $^ -o $@		// $^相当于把依赖文件挪过来了
									// $@相当于上一句中的目标文件
%.o: %.c
	$(CC) $^	$(CFLAGS) -o $@
Clean:
	$(RM) *.o mytool

%.o代表所有以.o结尾的依赖文件。%.c代表所有以.c结尾的依赖文件。
^表示这一段中的所有依赖文件;@表示上一句中的目标文件。

结束……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风栖柳白杨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值