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

请问下列Makefile代码中的step1和step2分别执行什么操作?

Makefile 两处语句逻辑说明

这是多目录项目里非常常用的递归编译子目录的Makefile写法,两处标注的语句逻辑如下:

step1 语句逻辑与作用

对应代码:
BUILDDIRS = $(DIRS:%=build-%)

  • 这是GNU Make的模式替换语法:$(变量名:模式A=模式B),作用是遍历变量DIRS里的每一个值,把符合%通配的部分保留,替换成build-%格式
  • 这里DIRS的值是modules utils library,替换后BUILDDIRS最终的值为build-modules build-utils build-library
  • 作用是批量生成每个子目录对应的构建目标名,不用手动逐个罗列目标,后续新增子目录只要往DIRS里加目录名即可,扩展性更强

step2 语句逻辑与作用

对应代码:
$(MAKE) -C $(@:build-%=%)

  • 首先$(MAKE)是Make内置变量,指代当前执行的make程序路径,避免硬编码make命令的适配问题
  • -C是make命令的原生参数,作用是先切换到后面指定的目录路径,再执行make操作
  • $(@:build-%=%)同样是模式替换:$@是Make的自动变量,指代当前正在执行的目标名。比如当前执行的目标是build-modules,就会把前缀build-去掉,得到子目录名modules
  • 整句的实际执行效果就是:切换到对应子目录下,执行该子目录里的Makefile,完成单个子目录的编译逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03