Определите Cygwin, Linux, Windows, используя переменные среды - PullRequest
2 голосов
/ 23 июня 2010

Проблема возникает, когда 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 с помощью переменных среды?

Ответы [ 4 ]

5 голосов
/ 23 июня 2010

Cygwin и (протестировано в Ubuntu) Linux предоставляют переменную окружения $OSTYPE, установленную в cygwin для Cygwin и linux-gnu для (Ubuntu) Linux.

Windows не имеет этой переменной, итак что, похоже, это единственный, что вам нужно.Я предполагаю, что вполне возможно, что ваш Linux не предоставляет его, и в этом случае вы можете использовать $OSTYPE, чтобы отличить Windows от Cygwin, а затем вернуться к uname для Cygwin против Linux.

1 голос
/ 24 июня 2010

Различие между Windows / не Windows, использующим SHELL, не работает для меня, как предложено pkh.Оказалось, что переменная SHELL определена в make-файле, запущенном gmake (у меня версия 3.81), и равна "sh.exe".Итак, текущим рабочим решением для меня является расширение идеи Пхх с выделением .exe расширения исполняемого файла Windows:

ifneq ($(findstring .exe,$(SHELL)),)
    $(warning In Windows)
else
    $(warning In Linux/Cygwin)
endif
0 голосов
/ 06 декабря 2018

В Cygwin переменная окружения OSTYPE должна быть экспортирована, чтобы make ее увидел.

0 голосов
/ 25 июня 2010

Предполагая, что у вас есть gcc на всех ваших машинах (т.е. вы что-то компилируете, используя свои make-файлы), вы можете использовать

gcc -dumpmachine

чтобы узнать ОС для которой собирается gcc.

Вы можете использовать выходные данные для установки некоторых переменных, таких как WINDOWS, LINUX или сохранить их напрямую для использования информации.

...