1. override 的作用
override 是 make 的一个特性,它确保即使命令行中传递了一个变量,也会强制使用 Makefile 中指定的值,前提是该变量尚未在命令行中设置。
具体来说:
- 如果你在
Makefile中使用了override sim ?= sdf,并且执行make all sim=rtl,那么sim变量的值仍然会是rtl,**而不是sdf**,因为make会优先使用命令行中传递的值。
所以,**如果你传递了 sim=rtl,即使在 Makefile 中有 override sim ?= sdf,sim 的值仍然是 rtl**。这是因为 override 只会在变量没有被命令行赋值时才生效。
例子:
1 | override sim ?= sdf |
如果你执行:
1 | make all sim=rtl |
输出会是:
1 | rtl |
而不是 sdf。因为 make 会使用命令行中传递的 sim=rtl 变量。
2. override 和命令行传递的变量
override 的作用是确保在 Makefile 中的变量如果没有在命令行中传递的情况下才会生效。也就是说:
- 如果命令行中没有传递
sim变量,override sim ?= sdf就会生效,将sim设置为sdf。 - 如果命令行中已经传递了
sim=rtl,override不会干扰命令行的赋值,所以sim会是rtl。
3. 解决方法
如果你希望强制 sim 的值无论如何都为 sdf,并且不受命令行传递的影响,应该直接赋值,而不是使用 ?=。比如:
1 | sim = sdf |
在这种情况下,无论你在命令行传递什么 sim=rtl,sim 的值都会是 sdf,因为 sim 是在 Makefile 中强制赋值的。
总结
override sim ?= sdf会在sim未被命令行赋值时才生效,但如果你执行make all sim=rtl,那么sim的值会是rtl,**不会是sdf**。- 如果你希望
sim始终保持为sdf,你需要直接使用sim = sdf(而不是?=),这样无论命令行如何传递,sim都是sdf。
本文作者:
ICXNM-ZLin
本文链接: https://talent-tudou.github.io/2024/12/28/makefile/Makefile-override关键字/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
本文链接: https://talent-tudou.github.io/2024/12/28/makefile/Makefile-override关键字/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!