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

Makefile子目录规则编写方法 如何让目标构建自动校验子目录依赖变更

核心修改思路

  • 拆分原来subsystem的冗余逻辑,仅保留子目录库构建的动作
  • 给最终目标$(NAME)添加subsystem前置依赖,保证任何场景下构建prog_name都会先检查子库变更
  • 去掉subsystem中递归调用make构建$(NAME)的逻辑,避免重复执行和依赖混乱

修改后规则示例

...
NAME := prog_name
...
all: $(NAME)

# subsystem仅负责子目录库构建
subsystem:
    @$(MAKE) -sC $(D_LIB)

$(D_OBJ):
    @mkdir -p $(D_OBJ)

# 给NAME添加subsystem依赖,确保构建前先检查子库变更
$(NAME): subsystem $(D_OBJ) $(OBJ) $(H) $(LIB)
    $(CC) ...  -o $(NAME)

$(D_OBJ)%.o: $(D_SRC)%.c $(H) $(LIB)
    @$(CC) ... -c $< -o $@

.PHONY: all subsystem

效果说明

调整后不管执行make all还是直接执行make prog_name,都会先触发subsystem规则检查$(D_LIB)下的变更:子库有更新的话会先完成子库的重新构建,再继续当前项目的编译链接逻辑,完全覆盖你需要的全依赖检查场景。

如果需要更精细化的子库变更感知(避免每次都触发子目录make调用),可以额外给$(LIB)对应的库文件添加依赖规则,绑定子库的源码文件即可。

内容的提问来源于stack exchange,提问作者vsezanatodazheeto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03