Linux / Mac: Что такое хороший метод для определения платформы во время компиляции? - PullRequest
2 голосов
/ 08 февраля 2011

Я хотел бы обобщить систему сборки для компиляции на нескольких (несколько похожих) платформах.Что является хорошим методом для определения типа хоста, на котором выполняется сценарий оболочки или Makefile.Я хотел бы различать Mac и Linux, , но также и различные конкретные дистрибутивы Linux (например, RHEL, Ubuntu).Cygwin для меня не важен, но если вы включите его в свой ответ, я уверен, что другие найдут его полезным.

Обоснование может включать использование типа хоста для выборки и установки правильных версий бинарных пакетов, когда онэто удобнее, чем компилировать из исходного кода.Кроме того, некоторые коммерческие программы упакованы в двоичные файлы для определенных дистрибутивов, поэтому часть мотивации - получить правильный двоичный файл.

Спасибо,

SetJmp

Ответы [ 5 ]

5 голосов
/ 08 февраля 2011

Автоинструменты на помощь. Он содержит множество макросов, которые помогут вам делать подобные вещи.

http://www.lrde.epita.fr/~adl/autotools.html

2 голосов
/ 08 февраля 2011
Варианты

linux обычно хранят информацию о дистрибутиве в / etc / issue.

большинство ядер помещают информацию в / proc / version

2 голосов
/ 08 февраля 2011

uname -a, чтобы отличить основные * nix варианты

Не совсем уверен, каким будет лучший способ отличить Red Hat от Ubuntu - можно найти инструменты управления пакетами и запросить установленные пакеты, что в конечном итоге поможет вам сузить кругразличные производные от Debian и т. д. Возможно, что-то более очевидное и предварительное.

1 голос
/ 08 февраля 2011

Это не совсем просто. Вы можете использовать uname, чтобы узнать общие параметры, но разграничить распределение - сложная задача. Может быть, вам стоит подумать об использовании чего-то вроде autoconf для обобщения вашей системы сборки?

0 голосов
/ 08 февраля 2011

На всякий случай, если вы используете Qt, есть этот действительно хороший набор определений, Q_OS_ *, который ведет вас к операционной системе, на которой вы компилируете:

Q_OS_AIX
Q_OS_BSD4
Q_OS_BSDI
Q_OS_CYGWIN
Q_OS_DARWIN
Q_OS_DGUX
Q_OS_DYNIX
Q_OS_FREEBSD
Q_OS_HPUX
Q_OS_HURD
Q_OS_IRIX
Q_OS_LINUX
Q_OS_LYNX
Q_OS_MAC
Q_OS_MSDOS
Q_OS_NETBSD
Q_OS_OS2
Q_OS_OPENBSD
Q_OS_OS2EMX
Q_OS_OSF
...

Они определены в QtGlobal .Существуют даже определения, которые помогут вам определить используемый компилятором Q_CC_ * или целевую оконную систему Q_WS _ *.

Но если вы не используете Qt и хотите использовать универсальный метод, вам, скорее всего, придетсявернуться к пакету Autotools или CMake .

Определение дистрибутивов Linux довольно сложно, но не сложно.Сначала вы должны выяснить, какие дистрибутивы вам нужны, а затем выполнить все виды проверок конкретных файлов / конфигураций, как в в этом примере для тех, которые вы выбрали, поскольку вы не можете реально поддерживать всеМножество дистрибутивов Linux доступны.: -)

Что касается стороны Mac, я позволю экспертам Mac ответить, но это не должно быть так сложно, так как, по крайней мере, вопрос разнообразия исключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...