精简Makefile模板

本文提供了一套精简的Makefile模板,适用于快速编译C源文件至可执行文件,包括静态库和动态库的生成。通过调整目标文件类型,可灵活应用于不同项目需求。文章强调理解Makefile各部分作用的重要性,以便高效定位并解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

关于Makefile的介绍,可以参考Makefile文件编写及make命令使用简介

Makefile在linux上编程中不可或缺。不管是大型的工程还是只有几个c文件的小项目,如果每次都要从头开始编写Makefile,就是一个重复造轮子的过程了。

因为Makefile中一些基本的框架和语句都是一样的,这里就结合我编写Makefile的一些经历,提取了一个精简的版本,可以直接在src子目录中直接使用。

当然,要想达到项目中的特定目的,还需要编写顶层Makefile。

Makefile源码

  • 该makefile用于将当前目录下所有的.c源文件编译为.o,最后生成可执行文件a.out
CROSS_COMPILE ?= 
EXTRA_CFLAGS += -Wall -Wextra -O2 -fPIC -g

SRC = $(wildcard *.c)
OBJECTS = $(SRC:.c=.o)
OUTPUT = a.out

all: $(OUTPUT)

$(OUTPUT): $(OBJECTS)
		$(CROSS_COMPILE)gcc $(EXTRA_CFLAGS) -o $@ $^

%.o: %.c
	$(CROSS_COMPILE)gcc $(EXTRA_CFLAGS) -MMD -o $@ -c $^
	
-include $(OBJECTS:.o=.d)

clean:
	$(RM) *.[od] 

PHONY: all clean

在此基础上,改变默认目标文件,可编译出.a, .so和可执行文件。

  • 静态库(依赖于.o):ar -rc $@ $^
  • 动态库(依赖于.o):gcc -shared $@ $^

也可以在上层Makefile中调用该子目录下的Makefile,达到管理子目录的效果。

总结

使用此Makefile模板,即可在此基础上根据项目需求修改开发。

在开发和使用中,要明白每条语句和指令的意义,这样才能在出现问题时迅速定位及解决。

更多关于Makefile的介绍,请参考Makefile文件编写及make命令使用简介

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值