Makefile通配符函数对空字符串求值为true

问题描述 投票:0回答:1

使用GNU Make 4.2.1

我正在编写一个Makefile,我想使用一个条件语句让make检查它是否在特定的远程服务器上。我想使用unix HOSTNAME环境变量来执行此操作。我也希望它无论子域都可以运行,因此我使用了make wildcard函数。

ifeq ($(wildcard *.remote.server.com),$(HOSTNAME))
        echo "ON REMOTE SERVER"
else
        echo "NOT ON REMOTE SERVER"
endif

这似乎可以正常工作,但是在我的本地计算机上未设置HOSTNAME环境变量,并且ifeq测试结果为true并显示ON REMOTE SERVER

这对我来说没有意义; *.remote.server.com正在与一个空字符串进行比较,应评估为false并打印NOT ON REMOTE SERVER

我是否缺少有关unix环境变量,wildcard或生成条件,或全部三个的某些信息?

unix makefile environment-variables gnu-make
1个回答
0
投票

您可以仅打印这些东西的值以查看它们的含义。像$(info wildcard='$(wildcard *.remote.server.com)' hostname='$(HOSTNAME)')一样?出现这种情况的原因完全取决于您无法访问的本地系统。

但是,我不明白为什么你说*.remote.server.com与一个空字符串进行比较。您已经编写了$(wildcard *.remote.server.com),并且可能没有与全局*.remote.server.com匹配的文件,这意味着wildcard函数将扩展为空字符串。

我想您可能对wildcard函数的功能感到困惑:您期望它做什么?它与主机名无关。

© www.soinside.com 2019 - 2024. All rights reserved.