Linux 在目标内设置make变量
假设GNU为3.81 下面的makefileLinux 在目标内设置make变量,linux,compilation,gnu-make,Linux,Compilation,Gnu Make,假设GNU为3.81 下面的makefile all: echo before TEST=1 echo after 在“TEST=1”行中产生“在第一个目标之前开始命令。停止” 从另一侧开始,在测试中添加“覆盖”,如下所示: all: echo before override TEST=1 echo after 运行良好(打印前和打印后) 问题: 为什么“测试=1”不正常,而“覆盖测试=1”正常 为什么目标命令中的“覆盖测试=1
all:
echo before
TEST=1
echo after
在“TEST=1”行中产生“在第一个目标之前开始命令。停止”
从另一侧开始,在测试中添加“覆盖”,如下所示:
all:
echo before
override TEST=1
echo after
运行良好(打印前和打印后)
问题:
override TEST=1
被解释为:
override: TEST=1
。。。这在GNU make中完全有效
您只需命名目标,然后在make文件的global部分中设置变量,即可修改每个目标的变量,如下所示:
<target>: <variable>:=<value>
<target>: <variable>=<value>
<target>: <variable>+=<value>
::=
: =
: +=
通过这种方式,通常只为单个对象文件添加或修改CFLAGS
注意:但是,在尝试时在目标的命令块中进行变量赋值是错误的语法。我猜是这样的
override TEST=1
被解释为:
override: TEST=1
。。。这在GNU make中完全有效
您只需命名目标,然后在make文件的global部分中设置变量,即可修改每个目标的变量,如下所示:
<target>: <variable>:=<value>
<target>: <variable>=<value>
<target>: <variable>+=<value>
::=
: =
: +=
通过这种方式,通常只为单个对象文件添加或修改CFLAGS
注意:然而,在尝试时在目标的命令块中进行变量赋值是错误的语法。类似于@dmckee规则的先决条件部分中定义的特定于目标的变量,而测试变量在规则的命令部分的某处。这是我的注释没有说“重复”的原因。类似于。@dmckee在规则的先决条件部分中定义了特定于目标的变量,而测试变量在规则的命令部分中。我的注释没有说“重复”是有原因的。
Target:a:=1
肯定不起作用(在/bin/sh:1:a:=:找不到时失败)当与$(A)
@KarlRichter:target:A:=1
一起使用时,会导致A
为空。我不知道/bin/sh
将如何或为什么参与其中。毕竟,这不是一个食谱。而target A=1
仍然需要在target
后面加一个冒号(:
),因为这样做的目的是将变量赋值限制到单个目标(可以是文件或虚假目标)。是的,这确实有效。你真的读过我答案末尾的便条了吗?!因为你的评论强烈表明你正陷入与问题OP相同的谬误中。target:A:=1
肯定不起作用(与/bin/sh:1:A:=:not found
)和target A=1
一起使用时会导致A
为空(A)
@KarlRichter:目标:A:=1
是GNU特定的。我不知道/bin/sh
将如何或为什么参与其中。毕竟,这不是一个食谱。而target A=1
仍然需要在target
后面加一个冒号(:
),因为这样做的目的是将变量赋值限制到单个目标(可以是文件或虚假目标)。是的,这确实有效。你真的读过我答案末尾的便条了吗?!因为你的评论强烈地表明,你正沦为与问题的主旨相同的谬误的牺牲品。