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

GNU Make 4.3:命令行变量T如何在多Makefile间传递?

GNU Make 4.3中命令行变量的传递生效逻辑(针对给定场景)

场景还原

现有两个Makefile文件:

  • Makefile内容:
all:
        make -f Makefile.app
  • Makefile.app内容:
T=1

all:
        @echo $(T)

执行命令make T=10后,输出结果为10,其变量传递生效的过程如下:

1. 命令行变量的优先级

GNU Make中,命令行传入的变量优先级高于Makefile内定义的普通变量。当执行make T=10时,T=10会被设置为当前主make进程的全局变量。

2. 主make到子make的变量传递

主Makefile的all目标执行make -f Makefile.app时,GNU Make默认会将当前进程中已定义的全局变量(除部分特殊内置变量外)传递给子make进程。这里的T=10就被自动传递到了执行Makefile.app的子make进程中。

3. 子Makefile的变量覆盖规则

在Makefile.app里,T=1属于普通变量定义,但由于命令行传入的变量优先级更高,子make进程会忽略这个本地定义,直接使用传递过来的T=10,最终执行@echo $(T)时输出10。

补充:如果想让子Makefile的本地变量定义覆盖命令行传递的变量,可以在Makefile.app中使用override关键字,比如写成override T=1,此时执行make T=10会输出1。

内容的提问来源于stack exchange,提问作者ϹοδεMεδιϲ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:05