GNU Make 基础深入解析
变量导出与取消导出规则
在使用变量的导出(export)和取消导出(unexport)操作时,遵循“最后指令生效”原则。例如,多次使用 export 指令定义同一变量,最后一次的定义会覆盖之前的定义。
export 指令还能与特定目标变量结合使用,为特定规则修改环境。示例如下:
export FOO=bar
all: export FOO=just for all
all: ; @echo FOO is $$FOO
此 Makefile 为 all 规则将 FOO 设置为 “just for all”,而其他规则中 FOO 为 “bar”。不过,不能使用特定目标的取消导出指令从特定规则的环境中移除变量。若编写 “all: unexport FOO”,会引发错误。
GNU make 会向子进程环境添加多个变量,如 MAKEFLAGS、MFLAGS 和 MAKELEVEL。其中,MAKEFLAGS 和 MFLAGS 包含命令行指定的标志,MAKEFLAGS 是为 GNU make 内部使用而格式化的标志,MFLAGS 仅因历史原因存在,切勿在规则配方中使用 MAKEFLAGS,若确实需要,可设置 MFLAGS。MAKELEVEL 变量记录通过 $(MAKE) 进行的递归 make 调用深度,从 0 开始。
若想确保每个 Makefile 变量都被导出,可单独写 “export” 一行,或指定 “.EXPORT_ALL_VARIABLES:”。但这种“全面导出”的方法可能不佳,因为会让子进程环境充满无用甚至有害的
超级会员免费看
订阅专栏 解锁全文
49

被折叠的 条评论
为什么被折叠?



