这样就把SRC_DIRS中定义的所有的文件夹里所有的.c文件都找出来了,给到SRCS这个变量中。 有了所有.c文件后,就可以推导出所有的.o文件,由于.o文件的位置和.c文件不一样,所以具体推导.o文件的步骤就是将.c文件的文件夹路径去掉,只保留.c文件的文件名,然后加上将要存放.o文件的路径,以及把.c的后缀换成.o。
计数编译文件个数 FILE_COUNT = $(shell find $(SRC_PATH) -name '*.$(SRC_EXT)'|wc -l)。 建立第一个目标规则 debug: dirs,dirs 作用是创建临时文件夹。 建立可执行文件目标规则 $(BIN_NAME): $(OBJECTS)。 通过include 方式添加所有所有目标的依赖 -include $(DEPS)。 目标依赖规则和生成目标依赖 ...
案例:Makefile Tutotial中一段代码 Makefile Tutotial最后给出了一段makefile,里面OBJS有字符串通配、替换的过程: Makefile 代码语言:javascript 复制 SRC_DIRS:=./srcBUILD_DIR:=./buildSRCS:=$(shell find$(SRC_DIRS)-name'*.cpp'-or-name'*.c'-or-name'*.s')OBJS:=$(SRCS:%=$(BUILD_DIR)/%.o)...
# 在这里添加要执行的命令print_dirs:@for dir in$(SRC_DIRS); do \echo"Processing directory: $$dir"; \(cd $$dir && pwd); \done 方式2 # 设置要排除的目录列表EXCLUDE_DIRS := \./vendor \./.git \./.idea \./examples \./test # 添加匹配的...
这个makefile 的巧妙之处在于它会自动为您确定依赖关系。您所要做的就是将您的 C/C++ 文件放入该src/文件夹中。 TARGET_EXEC := final_programBUILD_DIR := ./build SRC_DIRS := ./src# Find all the C and C++ files we want to compile# Note the single quotes around the * expressions. Make ...
src_files:=$(wildcard*.c)// 最终 src_files 中列出了当前目录下的所有.c` 文件 ④ 一步一步完善 Makefile第 1 个 Makefile,简单粗暴,效率低: 代码语言:javascript 复制 test:main.c sub.c sub.h gcc-o test main.c sub.c 第2 个 Makefile,效率高,相似规则太多太啰嗦,不支持检测头文件: ...
DIRS = $(shell find $(SRC_PATH) -maxdepth 3 -type d) # 为了更大幅度的支持项目的搭建,将三种文件格式的后缀都单独便利到变量中 SRCS_CPP += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp)) SRCS_CC += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cc)) ...
返回值为“src/foo src/bar”. 所以上面的意思是为dirver_dirs变量添加前缀,$(DRIVERS_DIR)/ $(1):shell的第2个参数数 $(2):shell的第1个参数数 $(1) $(2)有点类似于执行shell脚本中的第一个参数和第二个参数... makefile 中的$(1) $(2)用来表示call函数传过去的实参, ...
$(DIRS): $(MKDIR)$@ $(EXE):$(OBJS) $(CC)-o$@$^ %.o:%.c $(CC)-o$@-c$^ clean: $(RM)$(RMFLAGS)$(DIRS)$(EXE)$(OBJS) 运行结果 3.将文件放进目录 为了将⽬标⽂件或是可执⾏程序分别放⼊所创建的 objs 和 exes ⽬录中,我们需要⽤到 Makefile中的⼀ ...
“CFLAGS”会在命令中被展开为“-Ifoo -Ibar -O”。我们可以看到在“CFLAGS”定义中使用到了之后定义的变量“include_dirs”。 其缺点是: 1.使用此风格的变量定义,可能会由于出现变量的递归定义而导致make陷入到无限的变量展开过程中,最终使make执行失败。例如,接上边的例子,我们给这个变量追加值: ...