Makefile中的字符串替换,做下验证和总结。
Makefile Tutotial最后给出了一段makefile,里面OBJS有字符串通配、替换的过程:
Makefile
SRC_DIRS := ./src
BUILD_DIR := ./build
SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
TAR:
@echo SRCS : $(SRCS)
@echo OBJS : $(OBJS)
执行
touch aa123zz.c
touch aa332dzz.cpp
touch aa44325drzz.cpp
make
输出
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./build/./aa123zz.c.o ./build/./aa44325drzz.cpp.o ./build/./aa332dzz.cpp.o
(BUILD_DIR)/%.o)如何匹配的还是比较困惑,下面做一些实验和总结。
Makefile
SRCS := ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS := $(SRCS:.cpp=.cxx)
TAR:
@echo SRCS : $(SRCS)
@echo OBJS : $(OBJS)
输出
make
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./aa123zz.c ./aa44325drzz.cxx ./aa332dzz.cxx
规则:注意字符串中的空格起到分隔作用,分隔的每一个字符串都会应用下面规则
$(变量名:旧值=新值)
Makefile
SRCS := ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS := $(SRCS:./aa%zz.cpp=./AA%%ZZ.cxx)
TAR:
@echo SRCS : $(SRCS)
@echo OBJS : $(OBJS)
输出
make
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./aa123zz.c ./AA44325dr%ZZ.cxx ./AA332d%ZZ.cxx
规则:注意带通配符的话,旧值必须整体匹配,匹配一部分不行。
$(变量名:旧值带通配符)=新值带不带通配符都行通配符代表旧值中匹配的字符)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有