简单的Makefile

本文介绍了一个详细的Makefile示例,用于自动化构建C语言项目。通过使用wildcard、notdir、patsubst等函数,Makefile能够智能地处理源文件目录下的所有.c文件,生成对应的.o文件,并最终链接成可执行文件。文章还解释了Makefile中各种符号的含义,如$@、$^、$<等,以及.SECONDARY伪目标的作用。

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

代码示例:

# File paths 
SRC_DIR := ./src
BUILD_DIR := ./build
OBJ_DIR := $(BUILD_DIR)/obj
# Compilation flag
CC := gcc
LD := gcc
CFLAGS := -Wall
# Files to be compiled 
SRCS := $(wildcard $(SRC_DIR)/*.c)
OBJS := $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
BUILD := $(OBJS:$(OBJ_DIR)/%.o=$(BUILD_DIR)/%)

# Don't remove *.o files automatically 
.SECONDARY: $(OBJS)
all: $(BUILD)
# Compile each *.c file as *.o files 
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
        @echo + CC $< 
        @mkdir -p $(OBJ_DIR) 
        @$(CC) $(CFLAGS) -c -o $@ $< 
# Link each *.o file as executable files 
$(BUILD_DIR)/%:$(OBJ_DIR)/%.o
        @echo + LD $@ 
        @mkdir -p $(BUILD_DIR) 
        @$(LD) $(CFLAGS) -o $@ $< 
.PHONY:all clean
clean: 
        rm -rf $(BUILD_DIR) 

效果:

			|----test
				 |----src      (*.c)
				 |----build    (exe)
					  |----obj  (*.o)

符号解析:
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
$@ ——目标文件的名称;
$^ ——所有的依赖文件,以空格分开,不包含重复的依赖文件;
$< ——第一个依赖文件的名称。
wildcard : 扩展通配符
notdir : 去除路径
patsubst :替换通配符
.SECONDARY: $(OBJS) //make的时候是否保留中间文件 .o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值