Makefile:简单的Makefile示例(学习笔记)

本文通过四个部分逐步介绍Makefile的基础知识,包括理解规则和特殊变量,展示最简单的Makefile实例,逐步改进并提供一个较复杂的示例,帮助读者掌握Makefile的使用。
摘要由CSDN通过智能技术生成

No.1:了解Makefile规则及特殊变量

# 变量赋值方式

C := $A    # := 立即展开赋值
D = $A     # = 延迟展开赋值
A := 10
B := 20
B ?= $A    # ?= 条件赋值,如果该变量之前没有被赋值,则将右边变量的值赋给它,否则保持原值
E := 30
E += $A    # += 追加赋值

all:
	@echo "A = $A"
	@echo "B = $B"
	@echo "C = $C"
	@echo "D = $D"
	@echo "E = $E"


# 特殊变量:$@  $^  $<  $$  $*  $?
all2: f1 f2 f3
	@echo '$$@ = ' $@     # 当前规则中的目标
	@echo '$$^ = ' $^     # 当前规则中的所有依赖
	@echo '$$< = ' $<     # 当前依赖中的第一个
	@echo '$$$$ = ' $$$$  # 当前执行的进程的进程编号
	
#	@echo '$$* = ' $*     # 模式规则中的所有%匹配的部分
#	@echo '$$? = ' $?     # 模式规则中的所有比所在规则中的目标更新的文件组成的列表

f1:
	touch f1
f2:
	touch f2
f3:
	touch f3

了解Makefile规则及特殊变量
最简单的Makefile

No.2:最简单的Makefile

TGT := main.out
SRCS := bar.cc foo.cc main.cc

$(TGT): $(SRCS)
	g++ $^ -o $@

clean:
	rm -rf $(TGT)
	@echo "Clean up completed!";

最简单的Makefile

No.3:改进

TGT := main.out
SRCS := bar.cc foo.cc main.cc
# OBJ := bar.o foo.o main.o

CUR_DIR := $(shell pwd) # 当前目录
HEAD_DIR := $(CUR_DIR)  # 头文件目录

# CROSS_COMPILER := arm-linux- # 指定交叉编译环境
CFLAGS = -I$(CUR_DIR) # 指定编译选项

CC := $(CROSS_COMPILER)g++


$(TGT): $(SRCS:.cc=.o)
	$(CC) $^ $(CFLAGS) -o $@


# bar.o: bar.cc
# 	$(CC) $^ -c -o $@
# foo.o: foo.cc
# 	$(CC) $^ -c -o $@
# main.o: main.cc
# 	$(CC) $^ -c -o $@

# 利用模式规则改进上面注释部分 %会匹配.cc文件前面的部分
# 模式规则执行是一个循环取出的过程,每次取出一个.cc文件&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值