2015-09-08 4 views
0

Как вы можете различать MSYS и MSYS2 и CYGWIN, например, с помощью команды или предопределенной переменной среды?различают MSYS и MSYS2 и CYGWIN

Это различие потребует инструментов, таких как Scons, для адаптации сгенерированных командных строк, например. путем выдачи двойной обратной косой черты c:\\path\\to\\file или обратного обхода `cygpath -w /c/path/to/file`.

Фон: Я хотел бы использовать MSYS2 из-за его превосходного управления пакетами. Scons генерирует /c/path/to/file на MSYS2, но csc (компилятор Microsoft C#) допускает только пути стиля Windows.

+0

MSYS может _allow_ вас использовать имя пути, такие как «C: \ путь \ к \ файл», но он гораздо предпочитает использовать «/ с/путь/к/файлу. Этот вопрос должен быть спорным в любом случае: при вызове любой родной инструмент, (например, C# компилятор от Microsoft), из оболочки MSYS, имя пути «/ с/путь/к/файлу» конвертируется на лету, его родной окон эквивалентно (возможно, с регулярными разделителями '/' dirname, которые _are_ действительны в именах родного пути). Я не знаю, делает ли MSYS2 то же самое - я его не использую, но я понял, что это должно было случиться. –

+0

MSYS делает, но MSYS2 создает проблемы с 'csc' (ошибка CS1504: исходный файл не может быть открыт), вероятно, потому, что MSYS2 почти Cygwin. –

+1

MSYS2 - независимая вилка cygwin; он не поддерживается MinGW.org (кто действительно предоставляет MSYS), по той причине, что он, похоже, полностью потерял из виду первоначальное _minimalist_ намерение MSYS, поэтому, став, как вы говорите, «почти cygwin» (так зачем беспокоиться об этом, а не просто использовать cygwin?) –

ответ

0

Я не знаю какой-либо переменной окружения, которая надежно передает эту информацию, но вы должны сообщить вам результат от uname -s.

+0

cygwin: 'CYGWIN_NT-6.1-WOW64', MSYS:' MINGW64_NT-6.1', MSYS2: 'MINGW64_NT-6.1'. Таким образом, это не помогает различать MSYS и MSYS2. Я думаю, что это проблема MSYS2. Я постараюсь отправить его туда. Спасибо. –

+0

@RolandPuntaier: Что говорит 'uname -o'? Это более полезно? –

+0

'' uname -o'' cygwin: '' Cygwin'', MSYS: '' Msys'', MSYS2: '' Msys''. Я не лучше :-) –

0

Проверьте имя системы и версии:

case "$(uname -or)" in 
    1.*Msys) system='msys' ;; 
    2.*Msys) system='msys2' ;; 
    .*Cygwin) system='cygwin' ;; 
esac