Utilisation de homebrew, gcc et llvm avec C ++ 11
Voici mon problème: je veux utiliser C++11 caractéristiques fournies par la gcc ou clang. Cependant, j'ai ces exigences:
- Je suis sur un mac
- Je suis dépendante sur un tas de bibliothèques fournies par homebrew (et vraiment ne voulez pas compiler moi-même). Plus précisément OSG, qui elle-même repose sur une tonne d'autres bibliothèques. Et coup de pouce, mais je peux toujours compiler moi-même.
Homebrew semble être la seule à vouloir utiliser gcc (corrigez-moi si je me trompe). Je ne trouve pas toutes les options à passer à LLVM à la place. Même si je comprends que cela peut être dû au fait que toutes les bibliothèques sont compatibles avec LLVM encore, ce serait encore une fonctionnalité intéressante pour ceux qui le sont.
La version de gcc qui est livré pré-installé sur un mac de gcc 4.2. gcc 4.2 n'a pas le c++11 caractéristiques requises. J'ai installé 4.7 via homebrew, mais les recherches pour comprendre comment installer homebrew à l'utiliser tout dire ne pas le faire (gcc 4.2 sur le mac n'est pas la version classique, de sorte que le 4.7 version que j'ai de ne pas être en mesure de compiler certaines choses).
Mes questions sont: est-ce que quelqu'un a des suggestions ou des corrections qu'ils ont mises en œuvre pour contourner ce problème? Dois-je renoncer à Homebrew? Personne ne sait si Homebrew a un plan pour passer à LLVM dans l'avenir? Quelqu'un aurait-il une mise à niveau-plan pour la façon de traiter avec ces incompatibilités?
Je ne vois pas comment homebrew peut continuer à dépendre de la gcc 4.2 dans le long terme, mais n'ai pas trouvé de vrai débat sur cette question.
source d'informationauteur Abe Schneider
Vous devez vous connecter pour publier un commentaire.
La valeur par défaut de GCC sur Mac n'est pas réel GCC GNU. C'est LLVM-GCC en fait, ce qui est une branche de la GCC. Il y a plusieurs années, LLVM-GCC a été résilié et remplacé par DragonEggqui est un GCC plugin à utiliser LLVM comme GCC backend.
LLVM-GCC est juste un compilateur frontend, dont le rôle est à l'aide de GCC frontend pour traduire le code source en IR LLVM[Intro à LLVM 11.3]. Une fois IR généré, LLVM backend va l'utiliser pour générer le code binaire. Cette étape n'a rien à voir avec GCC.
L'objectif ci-dessus a été entièrement réalisée à partir de 10.7, dont les composantes ont été compilés par le bruit, une interface fournie par LLVM.
Mais Apple a toujours gardé LLVM-GCC et GCC bibliothèques d'exécution. Je suppose que son but peut-être une occasion de compiler du code de GCC.
Maintenant, nous allons répondre à vos questions:
clang++ -stc=c++11 -stdlib=libc++
à la place. Et clang peut-être déjà prises en charge toutes les fonctionnalités de c++11.--with-c++11
argument à utiliser clang pour compiler boost.Mais vous ne pouvez pas utiliser cet argument pourbrew install autoconf
. En fait, certains composants peuvent ne pas être compilé correctement par clang.$HOMEBREW_ROOT/Library/Formula
répertoire. Heureusement, dans la plupart des cas, le remplacement de./configure blablabla
avec./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++
fonctionne bien. Et par ailleurs, si votre hack est réussi, veuillez faire une pull request pour homebrew.Donc, essayez-la et amusez-vous.
J'ai un mac OS X Mountain Lion, de l'environnement et de l'utilisation de C++11. Dans cette réponse, je vais casser votre exigence de ne pas compiler vos propres trucs.
- Je utiliser Homebrew et, je dois le dire, je vous conseille de renoncer à en fonction pour lui permettre de vous clang et de la libc++ et toutes ses formules.
Ce que j'ai fait, et je l'aime, est
/opt/local
et mettre/opt/local/bin
au top sur/etc/paths
.J'ai suivi clang les instructions pour l'installer à
/opt/local
.Pour libc++, un détail: après l'exécution de la
buildit
script, j'ai un lien symbolique du répertoire include de/opt/local/lib/c++/v1
(clang sur/opt/local
ressemble à ce répertoire par défaut), et aussi un lien symbolique de la libs pour/opt/local/lib/
(mais regardez les binaires ne sera pas automatiquement le lien de la libc++ sur/opt/local/lib
. Vous devez utiliser install_name_tool pour ça).utilisation
vous pouvez également installer la dernière version de gcc à partir de homebrew-dup
Pour LLVM,
brew install --HEAD llvm
. Pour utiliser clang ou un bistrot installé gcc, ajouter--with-clang
ou--with-gcc=gcc-x.x
où x.x est la version que vous voulez.