【问题标题】:How to build Boost with C++0x support?如何使用 C++0x 支持构建 Boost?
【发布时间】:2011-02-22 16:21:54
【问题描述】:

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

最好, 维森特

【问题讨论】:

  • 想指出的是,从 boost 1.48 和 gcc-4.5 开始,对于 boost::filesystem 等库,使用 c++0x 编译是必要的。否则在链接时找不到像 copy_file 这样的函数。
  • 如果你在filesystem.hpp的include之前定义了宏:#define BOOST_NO_CXX11_SCOPED_ENUMS,它们会起作用

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


【解决方案1】:

我找到了答案。我正在等待类似“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

【讨论】:

  • 对于较新版本的 boost,它是 ./b2 toolset=gcc cxxflags=-std=gnu++0x。对于较新版本的 gcc,请使用 -std=gnu++11
  • 对于较新的版本,如果您不想启用 GNU 扩展,可以使用 std=c++11
【解决方案2】:

使用如下内容:

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

例如

这是一个改编自我的 framework 来自 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

【讨论】:

    【解决方案3】:

    要使用 clang 编译,请使用 cxxflagslinkflags

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 嗨,我在这个页面中没有看到任何与 c++0x 相关的内容。请您澄清一下您的回答吗?
      【解决方案5】:

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

      exe test : test.cpp : &lt;cxxflags&gt;-std=gnu++0x ;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2016-06-20
        • 2019-12-07
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多