如何使用C ++ 0x支持构建Boost?

时间:2010-05-22 10:20:32

标签: c++ boost c++11 bjam

我不知道如何使用C ++ 0x编译器构建Boost。必须给bjam哪个选项?是否应修改user.config文件?有人可以帮助我吗?

最佳, 森特

5 个答案:

答案 0 :(得分:41)

我找到了答案。我正在等待像'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

答案 1 :(得分:9)

要使用clang进行编译,请使用cxxflagslinkflags

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

调试时,将-v传递给cxxflags也很有帮助。

答案 2 :(得分:9)

使用以下内容:

./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(请参阅上述命令的输出) - &gt;编辑user-config.jam

如果您只想构建某些组件: 添加:

--with-libraries=system,thread,serialization

例如

以下是来自travis framework的改编脚本(adjust 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

答案 3 :(得分:3)

我遇到了一篇使用clang编译Boost的文章:http://blog.llvm.org/2010/05/clang-builds-boost.html。有可能调整那里提出的更改,以便使用Boost.Jam将Boost编译到您最喜欢的C ++ 0x编译器。

答案 4 :(得分:3)

另外,你可以change compilation flags for one file这样:

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