Unix Makefile通配符函数根据空字符串计算为true

Unix Makefile通配符函数根据空字符串计算为true,unix,makefile,environment-variables,gnu-make,Unix,Makefile,Environment Variables,Gnu Make,使用GNU Make 4.2.1 我正在编写一个Makefile,我想使用一个条件语句来检查它是否在特定的远程服务器上。我想使用unixHOSTNAME环境变量来完成此操作。我还希望它在不考虑子域的情况下运行,因此我使用makewildcard函数 ifeq ($(wildcard *.remote.server.com),$(HOSTNAME)) echo "ON REMOTE SERVER" else echo "NOT ON REMOTE SERVER" e

使用GNU Make 4.2.1

我正在编写一个Makefile,我想使用一个条件语句来检查它是否在特定的远程服务器上。我想使用unix
HOSTNAME
环境变量来完成此操作。我还希望它在不考虑子域的情况下运行,因此我使用make
wildcard
函数

ifeq ($(wildcard *.remote.server.com),$(HOSTNAME))
        echo "ON REMOTE SERVER"
else
        echo "NOT ON REMOTE SERVER"
endif
这看起来是可行的,但在我的本地计算机上,
HOSTNAME
环境变量未设置,
ifeq
测试计算结果为true,并在远程服务器上打印

这对我来说毫无意义
*.remote.server.com
将与空字符串进行比较,应计算为false,并在远程服务器上打印

我是否缺少有关unix环境变量、
通配符、make条件或所有这三个变量的信息

编辑:问题已解决。了解到这不是使用
通配符
功能的地方。相反,使用了类似于以下行的内容
ifeq“$(shell主机名| sed-e's/*.remote.server.com/remote.server.com/”)“remote.server.com”

根据这一答复:

您只需打印这些东西的值即可查看它们是什么。类似于
$(信息通配符='$(通配符*.remote.server.com)'hostname='$(主机名)
?这种行为的原因完全取决于您的本地系统,我们无法访问该系统

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


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

谢谢,我完全误解了通配符函数在这里的作用,以及通配符扩展的含义。