$(patsubst 原模式, 目标模式, 文件列表) 如: 在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o $(patsubst
notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数 makefile里的函数使用...4、patsubst 使用:OBJ = (patsubst %.o %.c (SRC)) patsubst是patten substitude的缩写,匹配替代的意思。...SOURCE := $(wildcard *.c) $(wildcard *.cc) OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE))... := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \ $(patsubst %.d,%.cc,$(MISSING_DEPS))) CPPFLAGS...EXECUTABLE) rebuild: veryclean everything ifneq ($(MISSING_DEPS),) $(MISSING_DEPS) : @$(RM-F) $(patsubst
复杂一些用法;可以使用“(patsubst %.c,%.o, #sample Makefile objects := (patsubst %.c,%.o,(wildcard *.c)) foo : $(...1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录 mkdir test cd test.../sub/*.c)dir=(notdir (src))obj=(patsubst %.c,%.o, all: @echo (src) @echo (dir) @echo wildcard把 指定目录...第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息 第三行输出: a.o b.o sa.o sb.o 在(patsubst %.c,%.o,(dir) )中,patsubst
1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $.../sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo...第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息 第三行输出: a.o b.o sa.o sb.o 在$(patsubst...%.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o, 任何输出。...PS:针对patsubst我们来好好聊一聊 这是个模式替换函数 格式:$(patsubst ,, ) 名称:模式字符串替换函数——patsubst
%.c,%.o,$(notdir $(SRC_C)))) SRC_MK = $(addprefix $(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))...notdir表示去除目录,则(notdir (SRC_C))表示a.c b.c patsubst表示把(notdir (SRC_C))中的.c替换成.o,即a.o b.o addprefix表示增加前缀...%.c,%.o,$(notdir $(SRC_C)))) SRC_MK = $(addprefix $(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))...%.c,%.o,$(notdir $(SRC_C)))) SRC_MK = $(addprefix $(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))...%.c,%.o,$(notdir $(SRC_C)))) SRC_MK = $(addprefix $(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))
%/, %/built-in.o, $(init-y)) 这里的patsubst 是实现匹配替换的,在这里将$(init-y) 中的 / 替换为'/built-in.o' 。...core-y := usr/ 562 core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ 574 core-y := $(patsubst...block/ built-in.o libs-y 在顶层Makefile中437行定义,然后后面577行进行修改: 437 libs-y := lib/ 577 libs-y1 := $(patsubst...%/, %/lib.a, $(libs-y)) // libs-y1:= lib/ lib.a 578 libs-y2 := $(patsubst %/, %/built-in.o... sound/ built-in.o net-y 在顶层Makefile中436行定义,在575行处修改: 436 net-y := net/ 576 net-y := $(patsubst
获取当前目录下所有.cpp文件编译后的所有目标文件.o:OBJ = $(patsubst %.cpp, %.o, $(SRC)) 函数4:addprefix 把所有的.o文件输出到固定目录,这是需要对所有的.../build/obj/, $(OBJ)) 可对上边的Makefile再进行修改: CC=g++ BIN=helloworld SRC=$(wildcard *.cpp) OBJ=$(patsubst %...lib目录下的Makefile内容如下: CC=g++ LIB=libfun.a SRC=$(wildcard *.cpp) OBJ=$(patsubst %.cpp, %.o, $(SRC)) $(.../lib LIBS= -lfun SRC=$(wildcard *.cpp) OBJ=$(patsubst %.cpp, %.o, $(SRC)) $(BIN):$(OBJ) $(CC...%.cpp, %.o, $(CPP_SOURCES)) DEP_FILES = $(patsubst %.o, %.d, $(CPP_OBJECTS)) $(EXE): $(CPP_OBJECTS)
patsubst ( patten substitude, 匹配替换的缩写)函数。它需要3个参数:第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。...例如,处理那个经过上面定义后的变量, OBJS = (patsubst %.c,%.o,(SOURCES)) 这行将处理所有在 SOURCES 列个中的字(一列文件名),如果它的 结尾是 .c ,就用...Makefile中foreach函数使用方法:https://blog.csdn.net/yanlaifan/article/details/71402771 Makefile中wildcard、notdir、patsubst
%, _dir_%, $(KERNEL_MODULES)) $(patsubst %, _dir_%, $(KERNEL_MODULES)): @echo @echo Building...$(patsubst _dir_%, %, $@) $(MAKE) -C $(patsubst _dir_%, %, $@) all romfs: $(patsubst %, _romfs..._%, $(KERNEL_MODULES)) $(patsubst %, _romfs_%, $(KERNEL_MODULES)): $(MAKE) -C $(patsubst _romfs_%,...%, $@) romfs clean: $(patsubst %, _clean_%, $(KERNEL_MODULES)) $(RM) $(BUILD_DIR) $(patsubst...%, _clean_%, $(KERNEL_MODULES)): @echo @echo Cleaning $(patsubst _dir_%, %, $@) $(MAKE) -C $(patsubst
程序员当然没有那么傻 wildcard、patsubst以及模式匹配%新的makefile代码如下: # hello由hello.o生成,所以hello依赖于hello.o; # 依赖关系用冒号(:)...OBJS += $(patsubst %.c,%.o,$(notdir $(wildcard $(SRC_DIR)/*.c))) hello: $(OBJS) gcc -o hello...OBJS += $(patsubst %.c,%.o,$(notdir $(wildcard $(SRC_DIR)/*.c))) hello: $(OBJS) gcc -o $@ $^.../sub OBJS += $(patsubst %.c,%.o, $(wildcard $(SRC_DIR)/*.c $(SUB_SRC_DIR)/*.c)) hello: $(OBJS...:= $(wildcard $(SRC_DIR)/*.c $(SUB_SRC_DIR)/*.c) OBJS += $(addprefix $(BUILD_DIR)/,$(patsubst
/modules/*.c) MODULES:=$(patsubst ..../modules/*.c) MODULES:=$(patsubst ..../modules/%.c, %, $(MODULES)) SRC:=$(wildcard *.c) SRC+=$(patsubst %, modules/%.c, $(MODULES)) OBJ:=...$(patsubst %.c, %.o, $(SRC)) CC:=gcc -fPIC all: static.c $(OBJ) $(CC) $(OBJ) -o mainstatic.c:
2. patsubst pat 是 pattern 的缩写,subst 是 substring 的缩写。...例如 OBJ = $(patsubst %.c, %.o, $(SRC)) 这个函数有三个参数,意思是取出 SRC 中所有的值,然后将 “.c” 替换为 “.o”,最后赋值给 OBJ 变量。 3....示例 通过上面两个函数,加入我们目录下有很多个 “.c” 后缀的源文件,就不需要写很多条规则语句了,而是可以像下面这样写 SRC = $(wildcard *.c) OBJ = $(patsubst %...示例 使用这些变量替换上面写的 Makefile,即是: SRC = $(wildcard *.c) OBJ = $(patsubst %.c, %.o, $(SRC)) ALL: hello.out...例如 SRC = $(wildcard *.c) OBJ = $(patsubst %.c, %.o, $(SRC)) ALL: hello.out hello.out: $(OBJ)
src = add.c sub.c mul.c div1.c 把 src 变量所有后缀为 .c 的文件替换成 .o obj = $(patsubst %.c, %.o, $(src)) # 将参数 3...用自动变量修改 makefile,如下: Makefile 第七版 src = $(wildcard *.c) # hello.c add.c sub.c mul.c div.c obj = $(patsubst...obj = $(patsubst ./src/%.c, ./obj/%.o, $(src)) # ./obj/hello.o ./obj/add.o ... inc_path = ....$(patsubst ,,) 名称:模式字符串替换函数。...示例:$(patsubst %.c,%.o,x.c.c bar.c),把字串 x.c.c bar.c 符合模式 %.c 的单词替换成 %.o ,返回结果是 x.c.o bar.o
$(target):$(objs) $(cc) $^ -o $@ .PHONY:clean clean: rm mp3 *.o 6、Makefile的常用函数 (1)模式替换函数-patsubst...函数原型:$(patsubst PATTERN,REPLACMENT,TEXT) .PHONY:all all: echo "$(patsubst %.c,%.o,x.c.c bar.c)"...当调用patsubst函数的时候,会去将后面的x.c.c、bar.c和前面的%.c匹配,匹配成功则变成.o文件 (2)取文件名函数-notdir echo "$(notdir src/foo.c hacks...void); void stop(void); #define song "my love" #endif Makefile 主要修改的地方是: INC_DIR=include CFLAGS=$(patsubst...(INC_DIR),$(wildcard $(dir)/*.h)) SOURCES:=$(foreach dir, $(SRC_DIR),$(wildcard $(dir)/*.c)) OBJS=$(patsubst
main.c a.c b.c SRCS = $(wildcard *.c) # OBJS表示SRCS中把列表中的.c全部替换为.o,相当于:OBJS = main.o a.o b.o OBJS = $(patsubst...C_SRC = $(wildcard *.c) C_OBJ = $(patsubst %c, %o, $(C_SRC)) # 目标文件也是多个 TARGETLIST = $(patsubst %.c,...CC = cc LD = cc SRCS = $(wildcard *.cpp) OBJS = $(patsubst %cpp, %o, $(SRCS)) # -I指定头文件目录 INCLUDE = -...-type d -maxdepth 1) # 去掉获取到目录名称前面的./ dirs := $(basename $(patsubst ./%, %, $(dirs))) # 过滤指定目录 dirs :
) $(CFLAGS) -c $< -o $@ %.o:%.cpp $(G) $(CFLAGS) -c $< -o $@ SOURCES = $(wildcard .c .cpp) OBJS = $(patsubst...%.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES))) $(TARGET):$(OBJS) $(G) $(OBJS) -o $(TARGET) chmod a+x $(TARGET...函数patsubst: 匹配替换,三个参数。第一个是需要匹配的样式,第二个目标样式,第三个是需要处理的由空格分离的列表。...OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES))) 把SOURCES文件列表中所有.cpp变成.o、.c变成.o,然后形成一个新的列表
lib/ core-y := usr/ virt-y := virt/ # Transform to corresponding built-in.a init-y := $(patsubst...%/, %/built-in.a, $(init-y)) core-y := $(patsubst %/, %/built-in.a, $(core-y)) drivers-y := $...(patsubst %/, %/built-in.a, $(drivers-y)) net-y := $(patsubst %/, %/built-in.a, $(net-y)) libs-y1...:= $(patsubst %/, %/lib.a, $(libs-y)) libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %....a, $(libs-y))) virt-y := $(patsubst %/, %/built-in.a, $(virt-y)) # Setup the dependency. vmlinux-deps
DIR_SRC}/test1.cpp) SRC_Client = $(wildcard ${DIR_SRC}/client.cpp ${DIR_SRC}/test1.cpp) OBJ_server = $(patsubst...%.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC_Server} )) OBJ_client = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir
Makefile: subst: @echo $(subst o,O,hello world) make: $ make subst hellO wOrld 4.2.2 $(patsubst pattern...Makefile: patsubst: @echo $(patsubst %.c,%.o,hello.c.c world.c) make: $ make patsubst hello.c.o world.o
领取专属 10元无门槛券
手把手带您无忧上云