41 votes

Comment construire Boost avec le support C++0x ?

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

Le meilleur, Vicente

42voto

Vicente Botet Escriba Points 2954

J'ai trouvé la réponse. J'attendais une fonction comme 'std' et je l'appelle comme suit :

bjam std=0x

mais actuellement nous devons utiliser les variables de bas niveau cxxflags et ajouter 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 paramètre différent.

En attendant 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 maintenant, appelez comme

bjam toolset=gcc-std0x

10voto

Gabriel Points 644

Utilisez quelque chose comme ça :

./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 la construction parallèle (12 threads). utiliser -std=c++11 pour une meilleure compatibilité et -std=gnu++11 pour les extensions gnu (seulement pour gcc)

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

si vous voulez construire seulement certains composants : ajouter :

--with-libraries=system,thread,serialization

par exemple

Voici un script adapté de mon cadre 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 s'installe dans /usr/local .

9voto

Sean Points 4446

Pour compiler avec clang, utilisez l'option cxxflags y linkflags :

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

Passage d'un -v à cxxflags est également utile lors du débogage.

3voto

Pieter Points 1883

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

3voto

Bunkar Points 141

En outre, vous pouvez changer les drapeaux de compilation pour un fichier comme ça :

exe test : test.cpp : <cxxflags>-std=gnu++0x ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X