Использование homebrew, gcc и llvm с С++ 11 - программирование
Подтвердить что ты не робот

Использование homebrew, gcc и llvm с С++ 11

Здесь моя проблема: я хочу использовать возможности С++ 11, предоставляемые gcc или clang. Однако у меня есть следующие требования:

  • Я использую mac
  • Я зависим от множества библиотек, предоставляемых homebrew (и действительно не хочу их компилировать самостоятельно). В частности OSG, которая сама зависит от тонны других библиотек. И повысить, хотя я всегда могу скомпилировать это сам.

Homebrew, похоже, хочет использовать gcc (пожалуйста, поправьте меня, если я ошибаюсь). Я не могу найти какие-либо опции для переключения на LLVM. Хотя я понимаю, что это может быть связано с тем, что еще не все библиотеки совместимы с LLVM, это все равно будет приятной возможностью для тех, которые есть.

Версия gcc, предварительно установленная на mac gcc, равна 4.2. В gcc 4.2 нет необходимых функций С++ 11. Я установил 4.7 через homebrew, но ищет, как установить homebrew, чтобы использовать все это, не делайте этого (gcc 4.2 на mac не является версией ванили, поэтому версия 4.7, которую я получил, не сможет скомпилировать некоторые вещи).

Мои вопросы: есть ли у кого-нибудь какие-либо предложения или исправления, которые они реализовали для решения этой проблемы? Должен ли я отказаться от Homebrew? Кто-нибудь знает, есть ли у Homebrew план перехода на LLVM в будущем? У кого-нибудь есть план обновления, как справиться с этими несовместимостями?

Я не вижу, как доморощенный может продолжать зависеть от gcc 4.2 в долгосрочной перспективе, но не нашел реального обсуждения этого вопроса.

4b9b3361

Ответ 1

По умолчанию GCC на Mac не является реальным GCC GNU. Это LLVM-GCC на самом деле, который является филиалом GCC. Несколько лет назад LLVM-GCC был прерван и заменен на DragonEgg, который является плагином GCC для использования LLVM в качестве сервера GCC.

LLVM-GCC - это просто интерфейс компилятора, роль которого заключается в использовании интерфейса GCC для перевода исходного кода в LLVM IR [Intro to LLVM 11.3 ]. После генерирования IR LLVM-бэкэнд будет использовать его для генерации двоичного кода. Этот шаг не имеет ничего общего с GCC.

Вышеуказанная цель была полностью достигнута из 10.7, компоненты которой были скомпилированы clang, интерфейсом, предоставленным LLVM.

Но Apple все еще сохраняла библиотеки LLVM-GCC и GCC. Я предполагаю, что его цель может предоставить возможность компилировать только код GCC ТОЛЬКО.

Теперь давайте ответим на ваши вопросы:

  • Если вы хотите использовать возможности С++ 11, используйте clang++ -stc=c++11 -stdlib=libc++. И clang, возможно, уже поддерживал все возможности С++ 11.
  • Если вы хотите, чтобы homebrew поддерживал LLVM, он уже поддерживал, по крайней мере, на сервере.
  • Если вы хотите, чтобы доморощенный использовал clang в качестве интерфейса компилятора, это зависит от расписания сообщества доморощенных. Например, вы можете добавить аргумент --with-c++11, чтобы использовать clang для компиляции boost.But вы не можете использовать этот аргумент, когда brew install autoconf. Фактически, некоторые компоненты могут быть не скомпилированы корректно clang.
  • Если вы знаете, что это может быть скомпилировано clang, но homebrew еще не поддерживается, вы должны взломать соответствующий ruby ​​ script в директории $HOMEBREW_ROOT/Library/Formula. К счастью, в большинстве случаев замена ./configure blablabla на ./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++ работает хорошо. И, кстати, если ваш взлом успешный, пожалуйста, сделайте запрос на перенос homebrew.

Итак, попробуйте и получите удовольствие.

Ответ 2

У меня есть среда OS X Mountain Lion и используйте С++ 11. В этом ответе я нарушу ваше требование не компилировать ваши собственные материалы.

Я использую Homebrew и, надо сказать, советую вам отказаться от него в зависимости от него, чтобы предоставить вам clang и libС++ и все его формулы, построенные с ними.

Что я сделал, и мне нравится,

  • clone llvm, clang и libС++ из репозиториев.
  • установите /opt/local и поместите /opt/local/bin вверху на /etc/paths.
  • Создайте свой материал для разработки с помощью моего нового clang.
  • let Homebrew для установки таких инструментов, как git и вещи, для которых я не буду развиваться, просто используйте.

Я следил за инструкциями по сборке clang для установки на /opt/local.

Для libС++, одна деталь: после запуска buildit script, я привязал каталог include к /opt/local/lib/c++/v1 (clang on /opt/local ищет это как каталог по умолчанию), а также символически привязывает библиотеки к /opt/local/lib/ (но посмотрите, что двоичные файлы не будут автоматически ссылаться на libС++ на /opt/local/lib. Для этого вы должны использовать install_name_tool).

Ответ 3

использовать

clang++ -std=c++11 -stdlib=libc++ 

вы также можете установить последнюю версию gcc из homebrew-dups ​​

brew install [flags] https://raw.github.com/Homebrew/homebrew-dupes/master/gcc.rb

Ответ 4

Для LLVM, brew install --HEAD llvm. Чтобы использовать clang или brew -installed gcc, добавьте --with-clang или --with-gcc=gcc-x.x, где x.x - желаемая версия.