Как собрать Boost с поддержкой C++0x?

Я не знаю, как собрать Boost с компиляторами C++0x. Какой вариант должен быть предоставлен bjam? Следует ли изменить файл user.config? Кто-нибудь может мне помочь?

Лучший, Висенте


person Vicente Botet Escriba    schedule 22.05.2010    source источник
comment
Хотел отметить, что начиная с boost 1.48 и gcc-4.5 компиляция с помощью c++0x необходима для таких библиотек, как boost::filesystem. В противном случае функции типа copy_file не будут найдены при линковке.   -  person alfC    schedule 04.11.2011
comment
Они будут работать, если вы определите макрос: #define BOOST_NO_CXX11_SCOPED_ENUMS перед включением filesystem.hpp   -  person Gabriel    schedule 24.09.2013


Ответы (5)


Я нашел ответ. Я ждал функции что-то вроде «std» и называю ее следующим образом:

bjam std=0x

но в настоящее время нам нужно использовать низкоуровневые переменные cxxflags и добавить определенные флаги компилятора. Например, для gcc мы можем сделать

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

Другим компиляторам потребуются другие настройки.

В ожидании новой функции Boost.Build вы также можете определить свой собственный набор инструментов следующим образом: Добавьте файл user.config или site.config.

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

А теперь позвони как

bjam toolset=gcc-std0x
person Vicente Botet Escriba    schedule 24.05.2010
comment
В более новых версиях boost это ./b2 toolset=gcc cxxflags=-std=gnu++0x. В новых версиях gcc используйте -std=gnu++11. - person Johan Lundberg; 22.06.2013
comment
В более новых версиях вы можете использовать std=c++11, если не хотите включать расширения GNU. - person Emile Cormier; 17.12.2014

Для компиляции с помощью clang используйте cxxflags и linkflags:

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

Передача -v в cxxflags также полезна при отладке.

person Sean    schedule 21.04.2012

Используйте что-то вроде этого:

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

-j12 для параллельной (12 потоков) сборки используйте -std=c++11 для лучшей совместимости и -std=gnu++11 для расширений gnu (только для gcc)

если boost::mpi не собран (см. вывод команды выше) -> отредактируйте user-config.jam

если вы хотите собрать только определенные компоненты: добавьте:

--with-libraries=system,thread,serialization

Например

Вот адаптированный скрипт из моего фреймворка от travis (настроить 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

который устанавливается в /usr/local.

person Gabriel    schedule 24.09.2013

Я наткнулся на статью о компиляции Boost с использованием clang: http://blog.llvm.org/2010/05/clang-builds-boost.html. Возможно, предложенные там изменения для компиляции Boost с помощью Boost.Jam можно будет адаптировать к вашему любимому компилятору C++0x.

person Pieter    schedule 24.05.2010
comment
Привет, я не вижу на этой странице ничего, связанного с С++ 0x. Пожалуйста, не могли бы вы пояснить свой ответ? - person Vicente Botet Escriba; 13.03.2011

Кроме того, вы можете изменить флаги компиляции для одного файла вот так:

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

person Bunkar    schedule 29.01.2011