Makefile中常用操作汇总
一,简介
在编写Makefile时,需要将对应的.c文件全部获取到,如果手动添加或者删除,效率太低,也容易出问题。
本文就介绍在Makefile中如何使用命令进行获取指定目录下的所有.c文件或者.h文件。
二,命令介绍
1,获取指定文件夹下的所有.c文件。
1.1 使用wildcard命令
# 使用wildcard命令和通配符“ * ”即可获取指定目录src下的所有.c文件,使用时将src替换为自己的目录即可
SRCDIR := .
SRCS := $(wildcard $(SRCDIR)/*.c)
# 编译目标
target: $(SRCS)
$(CC) $(CFLAGS) $(SRCS) -o target
1.2 使用find命令
SRCDIR := .
SRCS := $(shell find $(SRCDIR) -name '*.c')
2,获取路径操作
获取指定目录下的所有路径
# 指定目录
DIR := /path/to/directory
# 获取指定目录下的所有路径
PATHS := $(shell find $(DIR) -type d)
# 打印结果
$(info $(PATHS))
获取指定目录下的除去文件夹A外的所有路径
# 指定目录
DIR := /path/to/directory
# 要忽略的文件夹名
IGNORE_DIR := ignored_folder
# 获取指定目录下的所有路径,排除忽略的文件夹
PATHS := $(shell find $(DIR) -type d -not -path '*$(IGNORE_DIR)*')
# 打印结果
$(info $(PATHS))
获取指定目录下的除去文件夹A/B/C/D,外的所有路径
# 指定目录
DIR := /path/to/directory
# 要忽略的文件夹名
IGNORE_DIRS := ignored_folder1 ignored_folder2 ignored_folder3
# 获取指定目录下的所有路径,排除忽略的文件夹
PATHS := $(shell find $(DIR) -type d $(foreach dir,$(IGNORE_DIRS),-not -path '*$(dir)*'))
# 打印结果
$(info $(PATHS))
3,文件后缀替换操作
将变量中的.c后缀替换为.o
# 定义变量1,包含多个文件名
SOURCES := file1.c file2.c file3.c
# 将变量1中的所有.c替换成.o
OBJS := $(subst .c,.o,$(SOURCES))
# 打印结果
$(info $(OBJS))
4,Makefile中打印变量的值
# 定义一个变量
VAR := Hello, World!
# 打印变量并输出
print_var:
@$(info The value of VAR is $(VAR))
在上述代码中,定义了一个名为VAR的变量,并赋值为Hello, World!。
在目标print_var的规则中,使用 ( i n f o ) 函数来输出变量 V A R 的值。 (info)函数来输出变量VAR的值。 (info)函数来输出变量VAR的值。(info)函数类似于一个打印语句,可以在编译时输出信息到标准输出。
在命令前面添加@符号可以禁止Make工具打印该命令本身,只输出命令的执行结果。
使用make print_var命令执行该Makefile,则会输出The value of VAR is Hello, World!到标准输出。
三,总结
本文主要介绍如何在Makefile中添加指定目录下的所有.c文件。以及在Makefile中打印信息的方法