请问下列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
相关产品推荐
相关产品推荐

