【问题标题】:Choosing compiler options based on the operating system in boost-build在 boost-build 中根据操作系统选择编译器选项
【发布时间】:2013-09-22 03:15:20
【问题描述】:

目前我可以通过在命令行中设置工具集和参数来在不同平台上使用 boost build 来构建我的程序。例如:

Linux

b2

MacOS

b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"

有没有办法在 Jamroot 文件中创建规则来根据操作系统决定使用哪个编译器?我正在寻找这些方面的东西:

import os ;
if [ os.on-macos ] {
    using clang : <cxxflags>"-stdlib=libc++" <linkflags>"-stdlib=libc++c ;"
}

在 linux 中它会自动决定使用 gcc,但在 mac 中,如果我没有指定 clang 工具集,它会尝试(没有成功)用 gcc 编译它。

仅供参考,这是我目前的 jamroot(任何建议也值得赞赏):

# Project requirements (note, if running on a Mac you have to build foghorn with clang with libc++)
project myproject
    : requirements <cxxflags>-std=c++11 <linkflags>-std=c++11 ;

# Build  binaries in src
lib boost_program_options ;
exe app 
    : src/main.cpp src/utils src/tools boost_program_options 
;

【问题讨论】:

    标签: c++ gcc boost clang boost-build


    【解决方案1】:

    使用 Jamroot 怎么样?我有以下内容。它根据环境变量中的内容在 Linux 上的两个 GCC 版本之间进行选择,并在 AIX 上选择 vacpp。

    if [ os.name ] = LINUX
    {
        switch [ modules.peek : ODSHOME ]
        {
            case *gcc-4*    : using gcc : 4.4 : g++-4.4 ;
    
            case *gcc-3.3*  : using gcc : 3.3 : g++-3.3 ;
    
            case *          : error Only gcc v4 and gcc v3.3 supported. ;
        }
    
    }
    else if [ os.name ] = AIX
    {
        using vacpp ;
    }
    else
    {
        error Only Linux and AIX supported at present. ;
    }
    

    【讨论】:

      【解决方案2】:

      很长一段时间后,我发现确实没有办法(除了非常hacky)来做到这一点。 Boost.Build 的目标是让工具集选项供用户定义。

      用户有几种方法来指定工具集:

      1. 在命令行中以--toolset=gcc 为例
      2. 在用户配置中通过在user-config.jam 中为用户编译的所有项目设置它
      3. 在站点配置中为所有用户设置site-config.jam

      user-config.jam 可以在用户的​​ $HOME 或 boost 构建路径中。

      site-config.jam 应该在 /etc 目录中,但也可以在上面的两个位置。

      总之,设置您的站点配置或用户配置以获得愉快的体验,并为尝试编译您的程序的用户编写一个不错的 README 文件。

      希望这对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-02-21
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 2010-10-24
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        相关资源
        最近更新 更多