简单的Makefile

代码示例:

# 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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值