Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets > Отличить Windows от Linux. |
Автор: Сергей85 20.06.17, 16:16 |
Программа может запускаться в одной из двух ОС. Нужна функция или алгоритм определения запущенной ОС. |
Автор: shm 20.06.17, 16:18 |
Q_OS_WIN Q_OS_LINUX |
Автор: JoeUser 20.06.17, 16:53 |
Это "подсказки" компилятору какие куски кода использовать под целевую систему - это не определение. Определять можно так: 1) попробовать запустить команду VER, если успешно - значит получишь версию венды 2) попробовать запустить команду uname -a, если успешно - значит получишь версию *nix 3) а можно забыть про первые два пункта и заюзать QSysInfo |
Автор: shm 20.06.17, 17:07 |
Шо значит не определение? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> #ifdef Q_OS_WIN std::cout << "Windows"; #endif |
Автор: _lcf_ 20.06.17, 19:54 |
ну, наверное, имелось ввиду чтоб прям версия системы определялась. но в общем это нафиг нужно. как правило: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> #ifdef _WIN32 |
Автор: JoeUser 21.06.17, 05:27 |
Это указание на целевую платформу в compile-time. Челу же нужно определение в рантайме. Вот пример. Допустим таки удастя запустить линух прогу под вендой. Тогда такая линух-программа будет бодрячком рапортовать "я работаю под линухом", а это неверно. В рантайме с помощью QSysInfo - должно быть все ровно. |
Автор: VisualProg 21.06.17, 06:16 |
"_WIN32" "_WIN64" в MinGW и g++ есть ещё такая штука как "__linux__" Добавлено Вот такого я не умею Это получается, один и тот же собранный файл, например *.exe будет исполняемым (и соответственно полноценно работать) и на Win и на Linux одновременно? |
Автор: ter_nk_ 21.06.17, 06:54 |
Цитата VisualProg @ Это получается, один и тот же собранный файл, например *.exe будет исполняемым (и соответственно полноценно работать) и на Win и на Linux одновременно? Это невозможно. Допустим есть два исполняемых файла, все равно надо понять какой запускать. |
Автор: shm 21.06.17, 07:41 |
С чего ты взял? |
Автор: _lcf_ 21.06.17, 07:54 |
хм, а что, в процессе выполнения система может изменится? |
Автор: shm 21.06.17, 07:58 |
JoeUser рассматривает какой-то высосаный из пальца случай, когда прога запускается под эмулятором окружения ОС. К слову, я не уверен, что в этом случае |
Автор: OpenGL 21.06.17, 08:01 |
Цитата JoeUser @ Это указание на целевую платформу в compile-time. Челу же нужно определение в рантайме. Во-первых, это нигде не сказано. Во-вторых, что мешает написать так? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> std::string os_name() { #ifdef Q_OS_WIN return "Windows"; #else return "Linux"; #endif } |
Автор: JoeUser 21.06.17, 08:10 |
Так ясно же написано: Программа может запускаться в одной из двух ОС. Нужна функция или алгоритм определения запущенной ОС. Не компилятор и линкер, а программа. Значит рантайм. |
Автор: shm 21.06.17, 08:15 |
Не ясно совершенно Учитывая еще (по соседним темам), что Сергей85 не умеет формулировать вопросы. Более того, я не сомневаюсь, что запускаются разные сборки. |
Автор: Cfon 21.06.17, 08:20 |
коллега все это надо делать на этапе компиляции |
Автор: VisualProg 21.06.17, 08:55 |
Цитата ter_nk_ @ Это невозможно. Допустим есть два исполняемых файла, все равно надо понять какой запускать. Нет, я имею ввиду реально кросспатформу, чтобы прямо elf и exe и всё в одном флаконе, например, как *.jar/*.jad. Про два файла - это не интересно. Цитата JoeUser @ Программа может запускаться в одной из двух ОС. Нужна функция или алгоритм определения запущенной ОС. Не компилятор и линкер, а программа. Значит рантайм. Тогда не понятен смысл проверки ОС в реалтайме. Это же бессмысленно, с учётом того что со слов ter_nk_ ясно что на одной конкретной ОС будет одна конкретная сборка приложения) |
Автор: JoeUser 21.06.17, 14:02 |
Версий операционных систем - море. Каждая обладает рядом уникальных для нее одной свойствами. Часто это не важно, но не всегда. |
Автор: VisualProg 21.06.17, 14:35 |
Нет, ТС дал ясно понять что его интересуют две ОС - Windows и Linux, промежуточные версии каждой из них его не интересуют. |