Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 来自命令行的Makefile和变量目标_Variables_Makefile - Fatal编程技术网

Variables 来自命令行的Makefile和变量目标

Variables 来自命令行的Makefile和变量目标,variables,makefile,Variables,Makefile,Makefiles的新手问题。。。为什么这样不行 TARGET=$@ $(TARGET): * **/* @echo "TARGET=$(TARGET)" 这个在哪里 TARGET=my_target $(TARGET): * **/* @echo "TARGET=$(TARGET)" 从开始时,使我的目标成为 前者的结果是,“没有规则将目标设置为‘my_target’。” 除了“为什么这不起作用”这个问题,还有解决办法吗?我希望能够从命令行指定任意目标。我想我可以对一个

Makefiles的新手问题。。。为什么这样不行

TARGET=$@

$(TARGET): * **/*
    @echo "TARGET=$(TARGET)"
这个在哪里

TARGET=my_target

$(TARGET): * **/*
    @echo "TARGET=$(TARGET)"
开始时,使我的目标成为

前者的结果是,“没有规则将目标设置为‘my_target’。”

除了“为什么这不起作用”这个问题,还有解决办法吗?我希望能够从命令行指定任意目标。我想我可以对一个env变量做出反应,但这会使CLI变得笨重,例如,
maketarget=my_target build
或类似


我已经搜索过了,但是我没有找到正确的答案来解决这个问题。GNU为3.81。谢谢

自动变量
$@
在模式规则的上下文中定义;在任何规则之外,它都没有价值

如果您希望对您命名的任何目标执行相同的操作,可以使用“匹配任何内容”规则:

%:
    @echo TARGET=$@

这似乎有道理,但如果我在主体中执行
GIVEN=$@
,它确实会被赋值;我可以在我的目标中回音。在任何情况下,使用
%:
都会删除我的依赖项,当然,它会捕获所有内容。我没有在我的问题中说明这一点,但我想捕获特定的目标,例如
clean
,而
%:
似乎不允许这样做。这是因为通过使用
=
您正在创建一个包含文本字符串
$@
的变量。然后,在使用变量
$(给定)
的上下文中,而不是在分配变量的上下文中,此值将展开。有关何时计算变量值的说明,请参见。