问题出现在需要在不同的操作系统上运行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的最佳方法是什么?