Makefile 中未设置环境变量
Environment variable not getting set in Makefile
我在我的 makefile 中添加了以下代码
RHELC="0"
UBUNTUC="0"
SUSEC="0"
RHELC=$(shell cat /etc/*-release | grep rhel -c)
UBUNTUC=$(shell cat /etc/*-release | grep ubuntu -c)
SUSEC=$(shell cat /etc/*-release | grep suse -c)
ifneq "${RHELC}" "0"
OS_DIST="RHEL"
endif
ifneq "${UBUNTUC}" "0"
OS_DIST="UBUNTU"
endif
ifneq "${SUSEC}" "0"
OS_DIST="SUSE"
endif
但是 OS_DIST 没有设置。
这里有很多错误。意识到 makefile 不是 shell 脚本,它们具有不同的语法和规则。
首先请弄清楚environment变量和make变量的区别。您在这里设置 make 变量,而不是环境变量。这些变量的值将出现在您的 makefile 中,但不会出现在您的环境中。
其次,make 不会对变量中的引号做任何特殊处理。他们与任何其他角色一样被对待。当你写:
RHELC="0"
您正在将 make 变量 RHELC
设置为文字字符串 "0"
,包括引号。你没有将它设置为 0。同样,当你写:
OS_DIST="RHEL"
您正在将 make 变量 OS_DIST
设置为文字字符串 "RHEL"
。
关于您的问题,您没有解释为什么您认为未设置 make 变量。您向我们展示的 makefile 中没有任何内容可以检查或使用这些值,也没有您向我们展示的输出描述了它们的使用方式。
所以,我们无法进一步帮助您。
调试 makefile 可以做的一件事是使用 $(info ...)
make 函数来显示变量的值:
$(info RHELC=$(RHELC))
例如。
我在我的 makefile 中添加了以下代码
RHELC="0"
UBUNTUC="0"
SUSEC="0"
RHELC=$(shell cat /etc/*-release | grep rhel -c)
UBUNTUC=$(shell cat /etc/*-release | grep ubuntu -c)
SUSEC=$(shell cat /etc/*-release | grep suse -c)
ifneq "${RHELC}" "0"
OS_DIST="RHEL"
endif
ifneq "${UBUNTUC}" "0"
OS_DIST="UBUNTU"
endif
ifneq "${SUSEC}" "0"
OS_DIST="SUSE"
endif
但是 OS_DIST 没有设置。
这里有很多错误。意识到 makefile 不是 shell 脚本,它们具有不同的语法和规则。
首先请弄清楚environment变量和make变量的区别。您在这里设置 make 变量,而不是环境变量。这些变量的值将出现在您的 makefile 中,但不会出现在您的环境中。
其次,make 不会对变量中的引号做任何特殊处理。他们与任何其他角色一样被对待。当你写:
RHELC="0"
您正在将 make 变量 RHELC
设置为文字字符串 "0"
,包括引号。你没有将它设置为 0。同样,当你写:
OS_DIST="RHEL"
您正在将 make 变量 OS_DIST
设置为文字字符串 "RHEL"
。
关于您的问题,您没有解释为什么您认为未设置 make 变量。您向我们展示的 makefile 中没有任何内容可以检查或使用这些值,也没有您向我们展示的输出描述了它们的使用方式。
所以,我们无法进一步帮助您。
调试 makefile 可以做的一件事是使用 $(info ...)
make 函数来显示变量的值:
$(info RHELC=$(RHELC))
例如。