2010-05-22 12 views
39

No sé cómo compilar Boost con compiladores C++ 0x. ¿Qué opción se debe dar a bjam? ¿Debería modificarse el archivo user.config? ¿Alguien puede ayudarme?¿Cómo construir Boost con soporte C++ 0x?

mejor, Vicente

+4

Quería observar que a partir de boost 1.48 y gcc-4.5, compilar con C++ 0x es necesario para bibliotecas como boost :: filesystem. De lo contrario, las funciones como copy_file no se encuentran en los enlaces. – alfC

+0

Funcionarán si define la macro: '' #define BOOST_NO_CXX11_SCOPED_ENUMS'' antes de la inclusión de '' filesystem.hpp'' – Gabriel

Respuesta

39

He encontrado la respuesta. Estaba esperando una características algo así como 'STD' y lo llaman de la siguiente manera:

bjam std=0x 

pero en la actualidad tenemos que utilizar las variables de nivel CXXFLAGS bajas y añadir las opciones del compilador específicos. Por ejemplo para gcc podemos hacer

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

Otros compiladores necesitarán una configuración diferente.

A la espera de una nueva característica Boost.Build, también puede definir su propio conjunto de herramientas de la siguiente manera: Añadir el archivo o user.config site.config

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

Y ahora llamar como

bjam toolset=gcc-std0x 
+3

Con las versiones más nuevas de boost, es ./b2 toolset = gcc cxxflags = -std = gnu ++ 0x. Con las versiones más nuevas de gcc, use -std = gnu ++ 11 –

+1

Con las versiones más nuevas, puede usar 'std = C++ 11' si no desea habilitar las extensiones de GNU. –

3

me encontré con un artículo para la elaboración de Boost usando sonido metálico: http://blog.llvm.org/2010/05/clang-builds-boost.html. Podría ser posible adaptar los cambios propuestos allí para compilar Boost usando Boost.Jam a su compilador C++ 0x favorito.

+4

Hola, no veo nada en esta página relacionado con C++ 0x. Por favor, podrías aclarar tu respuesta? –

8

Para compilar usando sonido metálico, utilice el cxxflags y linkflags:

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

Pasar un -v a cxxflags también es útil cuando se depura.

8

usar algo como esto:

./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 

El -j12 es para paralelo (12 hilos) construir uso -std=c++11 para una mejor compatibilidad y -std=gnu++11 para las extensiones de GNU (sólo para gcc)

if boost :: mpi no es compilación (vea la salida del comando anterior) -> edite el archivo user-config.jam

si desea compilar solo ciertos componentes: añadir:

--with-libraries=system,thread,serialization 

por ejemplo

Aquí es un guión adaptado de mi framework de Travis (ajustar 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 

que se instala en /usr/local.

Cuestiones relacionadas