makefile的条件部分始终计算为true
我有一个基于遗留makefile的构建系统,我正在尝试对其进行更改。我不熟悉make,因此在尝试和错误的基础上进行更改 无法推断问题是什么,我在makefile中插入了这段代码:makefile的条件部分始终计算为true,makefile,Makefile,我有一个基于遗留makefile的构建系统,我正在尝试对其进行更改。我不熟悉make,因此在尝试和错误的基础上进行更改 无法推断问题是什么,我在makefile中插入了这段代码: ARG1 = GCC ARG2 = ARM ifeq($(ARG1),$(ARG2)) $(warning *** WARNING ***) endif 当我运行make时,我总是得到打印: \PathToBuildDirectory\makefile.options:54:*** WARNING *** 注
ARG1 = GCC
ARG2 = ARM
ifeq($(ARG1),$(ARG2))
$(warning *** WARNING ***)
endif
当我运行make时,我总是得到打印:
\PathToBuildDirectory\makefile.options:54:*** WARNING ***
注意:我正在使用带有-C gnu选项的clearmake。
条件如何或为什么求值为true?如果它对仅包含上述内容的makefile有这种行为,则它是
clearmake
中的一个bug。我知道clearmake对GNU make的模拟是不完整的,但这似乎很简单
但是,既然您已经在回显一个错误,那么显示ARG1和ARG2的值不是很简单吗?也许他们是平等的。可能在命令行上设置了一个或两个。可能在其他地方有一个或两个被分配了覆盖
选项。可能使用-e
选项调用clearmake,并且在环境中设置一个或两个变量
如果你展示他们的价值观,你就会知道
ETA:可能问题在于:在GNU make中,您必须在ifeq
后面加空格,如下所示:
ifeq ($(ARG1),$(ARG2))
如果您使用GNU make尝试您的原始版本,您将得到一个错误:
Makefile:3: *** missing separator. Stop.
但是我猜clearmake只是忽略了这一行,没有任何错误消息。我以一种通用的方式输入了代码片段。我甚至试过这样做:ifeq(ARM,GNU)$(warning***warning***)endif现在即使这样也会在输出中生成print语句!因为这种行为是如此的怪异和不可思议,我检查了make手册中ifeq语句的语法,没有发现明显的用法错误。有什么不对劲的线索吗?