使用环境变量识别Cygwin,Linux,Windows

pmo*_*mod 2 linux windows makefile environment-variables detection

当makefile需要在不同的OS上运行并且应该根据操作系统正确设置各种设置(转义,路径分隔符等)时,会出现问题.第一种方法是使用Windows COMSPEC:

ifneq ($(COMSPEC)$(ComSpec),)
## in windows
else 
## in linux
endif
Run Code Online (Sandbox Code Playgroud)

这对于Cygwin来说是误报,因为它看到了Windows的环境变量,并将Cygwin视为Windows.然后我们尝试了Linux PWD:

ifeq ($(PWD),)
## in windows
else 
## in linux, cygwin
endif
Run Code Online (Sandbox Code Playgroud)

但是,由于异地工具的集成,我们在Windows中设置了PWD(perl的模块之一).因此,检测再次失败.

我想知道,使用环境变量区分Cygwin,Linux,Windows的最佳方法是什么?

pkh*_*pkh 5

Cygwin和(在Ubuntu上测试)Linux提供了一个$OSTYPE环境变量,设置cygwin为Cygwin和linux-gnu(Ubuntu)Linux.

Windows没有此变量,因此它似乎是您唯一需要的变量.我想你的 Linux 可能没有提供它,在这种情况下你可以$OSTYPE用来区分Windows和Cygwin,然后再回到unameCygwin和Linux.