42

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

最好的,维森特

4

5 回答 5

44

我找到了答案。我正在等待类似“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
于 2010-05-24T08:50:02.293 回答
12

使用这样的东西:

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

于 2013-09-24T09:21:13.323 回答
11

要使用 clang 编译,请使用cxxflagsand linkflags

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

在调试时传递一个-vtocxxflags也很有帮助。

于 2012-04-21T17:27:47.957 回答
3

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

于 2010-05-24T07:57:33.993 回答
3

此外,您可以像这样更改一个文件的编译标志

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

于 2011-01-29T17:33:34.640 回答