Проблема возникает, когда make-файл должен быть запущен на разных ОС, и в зависимости от ОС необходимо правильно настроить различные настройки (экранирование, разделитель пути и т. Д.)
Первым подходом было использование 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 с помощью переменных среды?