2010-05-22 4 views
39

Je ne sais pas comment construire Boost avec les compilateurs C++ 0x. Quelle option doit être donnée à bjam? Le fichier user.config doit-il être modifié? Quelqu'un peut-il m'aider?Comment construire Boost avec le support C++ 0x?

Best, Vicente

+4

A voulu noter qu'à partir de boost 1.48 et gcc-4.5, compiler avec C++ 0x est nécessaire pour les bibliothèques telles que boost :: filesystem. Sinon, des fonctions comme copy_file ne sont pas trouvées lors de la liaison. – alfC

+0

Ils fonctionneront si vous définissez la macro: '' #define BOOST_NO_CXX11_SCOPED_ENUMS'' avant l'inclusion de '' filesystem.hpp'' – Gabriel

Répondre

39

J'ai trouvé la réponse. J'attendais une des caractéristiques quelque chose comme « std » et l'appelle comme suit:

bjam std=0x 

mais actuellement, nous devons utiliser les variables bas niveau CXXFLAGS et ajoutez les drapeaux spécifiques du compilateur. Par exemple pour gcc nous pouvons faire

bjam toolset=gcc cxxflags=-std=gnu++0x 

D'autres compilateurs auront besoin d'un réglage différent.

En attente d'une nouvelle fonctionnalité de Boost.Build, vous pouvez également définir votre propre jeu d'outils comme suit: Ajoutez le fichier user.config ou site.config

using gcc 
    : std0x 
    : "/usr/bin/g++" # your path to the C++0x compiler 
    : <cxxflags>-std=gnu++0x 
    ; 

Et appeler comme

bjam toolset=gcc-std0x 
+3

Avec les nouvelles versions de boost, c'est ./b2 toolset = gcc cxxflags = -std = gnu ++ 0x. Avec les nouvelles versions de gcc, utilisez -std = gnu ++ 11 –

+1

Avec les versions plus récentes, vous pouvez utiliser 'std = C++ 11' si vous ne voulez pas activer les extensions GNU. –

3

je suis tombé sur un article pour la compilation Boost en utilisant clang: http://blog.llvm.org/2010/05/clang-builds-boost.html. Il pourrait être possible d'adapter les changements proposés ici pour compiler Boost en utilisant Boost.Jam à votre compilateur C++ 0x préféré.

+4

Salut, je ne vois rien dans cette page liée à C++ 0x. Pouvez-vous clarifier votre réponse? –

8

Pour compiler en utilisant clang, utilisez le cxxflags et linkflags:

./b2 \ 
    ... 
    cxxflags="-std=c++0x -stdlib=libc++" \ 
    linkflags="-stdlib=libc++" \ 
    ... 

Le passage d'un -v-cxxflags est également utile lors du débogage.

8

Utilisez quelque chose comme ceci:

./bootstrap.sh --with-toolset=gcc --prefix=/usr/local 

./b2 -j12 toolset=gcc variant=release link=shared threading=multi address-model=64 cxxflags=-std=c++11 install 

Le -j12 est pour parallèle (12 fils) construire utilisation -std=c++11 pour une meilleure compatibilité et -std=gnu++11 pour les extensions gnou (uniquement pour gcc)

si boost :: mpi n'est pas construit (voir la sortie de la commande ci-dessus) -> éditer le user-config.jam

si vous voulez construire seulement certains composants: ajouter:

--with-libraries=system,thread,serialization 

par exemple

Voici un script adapté de mon framework de travis (ajuster ROOT_PATH):

BOOST_DOWNLOAD_URL="http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download" 
BOOST_BUILD=${ROOT_PATH}/boostBuild 
mkdir -p ${BOOST_BUILD} 
wget --no-verbose --output-document="${ROOT_PATH}/boost.tar.bz2" "$BOOST_DOWNLOAD_URL" 
cd ${BOOST_BUILD} 
tar jxf "${ROOT_PATH}/boost.tar.bz2" --strip-components=1 -C "${BOOST_BUILD}" 
./bootstrap.sh --with-toolset=gcc --with-libraries=system,thread,serialization,filesystem,chrono,atomic,date_time 
sudo ./b2 -j12 toolset=gcc threading=multi link=shared release install 

qui installe dans /usr/local.

Questions connexes