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
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
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
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 –
Con las versiones más nuevas, puede usar 'std = C++ 11' si no desea habilitar las extensiones de GNU. –
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.
Hola, no veo nada en esta página relacionado con C++ 0x. Por favor, podrías aclarar tu respuesta? –
Además, puede change compilation flags for one file así:
exe test : test.cpp : <cxxflags>-std=gnu++0x ;
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.
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
.
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
Funcionarán si define la macro: '' #define BOOST_NO_CXX11_SCOPED_ENUMS'' antes de la inclusión de '' filesystem.hpp'' – Gabriel