【问题标题】:Variable declaration in make toolsmake 工具中的变量声明
【发布时间】:2014-01-23 08:24:06
【问题描述】:

让我们有一个简单的make-file

default:
    $(CC) $(FLAGS) $(TARGET) $(TARGET).c

CC=gcc
FLAG= -o
TARGET=binary

那么变量CCFLAGTARGET 是否会被添加到make 工具的环境变量数组中,或者这个变量不依赖于make 的变量环境?

【问题讨论】:

    标签: linux makefile environment-variables


    【解决方案1】:

    我不确定您在这里到底要问什么,但是:make 维护自己的一组变量,这些变量与“环境变量”完全分开(在环境变量的标准系统定义中)。当 make 扩展一个变量(例如$(CC))时,它使用的是它的“make variables”集合中的值,而不是“环境变量”。

    当 make 启动时,它会将所有环境变量导入为“make variables”,以便可以通过正常的 make 变量扩展来访问它们。

    如果你改变了一个 make 变量的值,它也是环境的一部分,那么环境中的值也会改变。此外,当您使用 export 关键字(在 GNU make 中)时,make 也会将该变量放入环境中。

    当 make 运行一个程序时,它会将环境变量而不是 make 变量传递给它正在运行的程序。

    【讨论】:

    • 感谢您的回答。但是,如果我们向default 目标的配方添加env 配方,我们就会显示环境变量数组。真的会是 shell 的变量,而不是 make 工具变量,因为配方是在 shell 本身中执行的吗?
    • 我很难理解你的问题,所以如果我没有正确理解,请原谅我,但是当我在上面说“运行程序”时,这意味着配方中的任何命令以任何方式调用任何目标。如果该配方包含env 程序,那么显示的环境将是程序启动的环境,也就是传递给它的环境。这将 包括所有 make 变量。它只会包含 make 启动时环境中的变量,以及 make export 命令指定的任何变量。
    • 特定配方是在make 进程中执行还是在配方执行之前调用bash 进程?
    • 抱歉,我理解的不够深入,无法回答。
    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多