Variables 来自命令行的Makefile和变量目标
Makefiles的新手问题。。。为什么这样不行Variables 来自命令行的Makefile和变量目标,variables,makefile,Variables,Makefile,Makefiles的新手问题。。。为什么这样不行 TARGET=$@ $(TARGET): * **/* @echo "TARGET=$(TARGET)" 这个在哪里 TARGET=my_target $(TARGET): * **/* @echo "TARGET=$(TARGET)" 从开始时,使我的目标成为 前者的结果是,“没有规则将目标设置为‘my_target’。” 除了“为什么这不起作用”这个问题,还有解决办法吗?我希望能够从命令行指定任意目标。我想我可以对一个
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
,而%:
似乎不允许这样做。这是因为通过使用=
您正在创建一个包含文本字符串$@
的变量。然后,在使用变量$(给定)
的上下文中,而不是在分配变量的上下文中,此值将展开。有关何时计算变量值的说明,请参见。