当 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(perl 的模块之一)中设置了 PWD。因此,检测再次失败。
我想知道,使用环境变量区分 Cygwin、Linux、Windows 的最佳方法是什么?