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

的Linux

b2

苹果系统
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
;

最佳答案

如何使用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. ;
}

09-06 05:45