Unix Makefile通配符函数根据空字符串计算为true
使用GNU Make 4.2.1 我正在编写一个Makefile,我想使用一个条件语句来检查它是否在特定的远程服务器上。我想使用unixUnix 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
HOSTNAME
环境变量来完成此操作。我还希望它在不考虑子域的情况下运行,因此我使用makewildcard
函数
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
函数将扩展为空字符串
我想您可能会对通配符
函数的功能感到困惑:您希望它做什么?它与主机名无关。谢谢,我完全误解了通配符函数在这里的作用,以及通配符扩展的含义。