当 makefile 需要在不同的操作系统上运行并且应根据操作系统正确设置各种设置(转义、路径分隔符等)时,就会出现问题。
第一种方法是使用 Windows COMSPEC:
ifneq ($(COMSPEC)$(ComSpec),)
## in windows
else
## in linux
endif
这对于 Cygwin 来说是误报,因为它看到 Windows 的环境变量并将 Cygwin 检测为 Windows。
然后我们尝试了Linux PWD:
ifeq ($(PWD),)
## in windows
else
## in linux, cygwin
endif
然而,由于集成了场外工具,我们在 Windows 中设置了 PWD(perl 的模块之一)。于是,检测又失败了。
我想知道,使用环境变量区分 Cygwin、Linux、Windows 的最佳方法是什么?
Cygwin 和(在 Ubuntu 上测试)Linux 提供了$OSTYPE
环境变量,设置为cygwin
对于 Cygwin 和linux-gnu
适用于(Ubuntu)Linux。
Windows 没有此变量,因此它似乎是您唯一需要的变量。我想有可能yourLinux不提供,这种情况下你可以使用$OSTYPE
区分 Windows 和 Cygwin,然后回退到uname
Cygwin 与 Linux 的比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)