You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:22:18