web-dev-qa-db-fra.com

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

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

Best, Vicente

41

J'ai trouvé la réponse. J'attendais une fonctionnalité quelque chose 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 on peut faire

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

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

En attendant une nouvelle fonctionnalité 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

bjam toolset=gcc-std0x
42

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

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

si vous ne voulez construire que certains composants: ajoutez:

--with-libraries=system,thread,serialization

par exemple

Voici un script adapté de mon framework de travis (ajustez 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.

10
Gabriel

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

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

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

9
Sean

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

3
Pieter

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

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

3
Bunkar