如何在Justfile中实现Makefile的wildcard与patsubst功能?
借助Makefile实现C源码到目标文件的批量编译
编译C代码时,需要将所有.c源码文件转换为.o目标文件,但gcc本身不具备自动批量完成该操作的能力,因此需要借助Makefile来实现。
下面是使用Makefile的wildcard和patsubst函数实现该功能的示例:
wildcard功能很直观,就是通过通配符匹配指定路径下的文件(比如匹配src/*.c所有源码文件)。patsubst的用法相对复杂,它会将wildcard获取到的每个文件路径,按照指定模式替换为目标格式(比如把src/xxx.c替换成obj/xxx.o)。
完成路径匹配和替换后,Makefile会自动针对每个处理后的.o文件调用gcc完成编译。我曾尝试用just工具实现相同功能,但未能成功。
# 定义源码目录 SRC_DIR := src # 定义目标文件目录 OBJ_DIR := obj # 使用wildcard函数获取所有源码文件 SRC_FILES := $(wildcard $(SRC_DIR)/*.c) # 使用patsubst函数将源码文件路径转换为目标文件路径 OBJ_FILES := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC_FILES)) # 指定编译器 CC := gcc # 编译选项 CFLAGS := -Wall -Wextra -Iinclude # 目标可执行文件名 TARGET := my_program # 默认构建规则:生成可执行文件 $(TARGET): $(OBJ_FILES) $(CC) $^ -o $@ # 编译规则:将源码文件编译为目标文件 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c $< -o $@ # 清理规则:删除目标文件和可执行文件 clean: rm -f $(OBJ_DIR)/*.o $(TARGET)
内容的提问来源于stack exchange,提问作者Al-Baraa El-Hag
相关产品推荐
相关产品推荐

