`bjam --toolset =`和Apple编译器的标记值?

时间:2010-09-07 20:01:39

标签: xcode boost bjam boost-bjam

使用bjam构建Boost二进制库时,可以通过使用--toolset=选项的某些值来指定要使用的编译器,,不带指定特定的编译器版本。例如:

bjam --with-serialization --toolset=msvc

工具集值 msvc告诉bjam在您的系统中搜索某些版本的Microsoft Visual C ++,然后使用它来构建一个数字Boost.Serialization库的变体。生成的库将包含一个标记,指示实际使用的工具集。例如,上面的命令创建如下文件:

libboost_serialization-vc100-mt-s-1_44.lib
libboost_serialization-vc100-mt-sgd-1_44.lib
...

文件名中的字符串vc100工具集标记,表示找到 Microsoft Visual C ++ 2010 编译器版本并用于构建库。 [可以找到有关Boost库文件命名约定的更多详细信息here.]

还可以使用--toolset=选项的某些其他值指定编译器的特定版本。例如:

bjam --with-serialization --toolset=msvc-9.0

告诉bjam即使我的系统上有几个编译器,我也希望它专门使用 Microsoft Visual C ++ 2008 。生成的库包含标记字符串vc90,表示使用 Microsoft Visual C ++ 2008 构建它们。

对于Mac上的新编译器,Boost文档似乎有点过时(例如,如何区分GCC,LLVM-GCC和LLVM?)

我的问题是,Mac上的Xcode 3和Xcode 4中的 特定编译器版本 的其他bjam --toolset=值及其对应标记是什么? (一般编译器名称值,如darwin)?这些记录在哪里?即使Boost尚不支持使用某些版本构建Boost库,是否已指定toolset和标记值?

请帮助替换此表中的???

TOOL AND VERSION               --toolset=     TAG
======================================================
Microsoft Visual C++ 2008      msvc-9.0       vc90
Microsoft Visual C++ 2010      msvc-10.0      vc100
Apple (1) GCC 4.0 (2)            ???          xgcc40
Apple GCC 4.2                    ???          xgcc42
Apple LLVM GCC 4.2               ???           ???
Apple LLVM compiler 1.5 (2)      ???           ???
Apple LLVM compiler 2.0 (3)      ???           ???

(1)Apple生产自己版本的GCC和LLVM编译器,以添加特定于Apple的扩展和行为。

(2)仅适用于Xcode 3。

(3)仅适用于Xcode 4。

1 个答案:

答案 0 :(得分:6)

从指定的工具集到标记的基本部分有直接映射。因此,对于您指定使用darwin.jam工具集的任何Apple Xcode编译器,标记的开头始终为xgcc(对于Xcode GCC)。第二部分,即编译器的版本号,通常是从编译器本身自动发现的。 darwin.jam工具集代码使用-dumnpversion选项来发现该版本的内容(请参阅darwin.jam第123行)。所以有一些事情:

  1. 对于Xcode,默认toolset=darwin始终为g++
  2. 对于其他非默认版本,您必须设置site-config.jamuser-config.jam以告知Boost Build您在哪里以及哪些编译器(请参阅BB Configuration文档)。< / LI>
  3. toolset=darwin-<some_version>与您在配置中指定的内容相匹配。
  4. darwin.jam工具集支持根据您尝试构建的内容智能选择编译器,以使其更容易。
  5. 例如,我使用类似以下内容进行iOS开发:

    using darwin : : /Xcode-path/usr/bin/g++-4.0 ;
    using darwin : : /Xcode-path/usr/bin/g++-4.2 ;
    using darwin : 4.2~iphone
    :   /Xcode-path/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6
    :   <striper>
    :   <architecture>arm <target-os>iphone
    ;
    using darwin : 4.2~iphonesim
    :   /Xcode-path/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2
    :   <striper>
    :   <architecture>x86 <target-os>iphone
    ;
    

    我可以:

    1. bjam toolset=darwin-4.0 - 对于使用GCC 4.0的常规OSX构建。这会产生标记xgcc-42
    2. bjam toolset=darwin-4.2 - 同样适用于OSX和GCC 4.2。为此,我会得到xgcc-42
    3. 的标记
    4. bjam toolset-darwin architecture=arm target-os=iphone - 使用GCC 4.2进行iPhone设备构建。标签最终也是xgcc42,这是一个碰撞。但是我们可以在这些标签中考虑多少是有限的。它通常不是问题,因为无论如何都会跨平台隔离构建的结果。
    5. 您可以通过添加到配置来使用其中一个LLVM编译器进行设置:

      using darwin : 4.2~llvm~gcc : /Xcode-path/user/bin/llvm-g++ ;
      

      使用bjam toolset=darwin-4.2~llvm~gcc调用。不幸的是,标记也是xgcc-4.2(同样,它基于使用darwin.jam)。因此,您需要将生成的库与其他GCC构建隔离开来。

      同样不幸的是,除了代码之外,没有记录将工具集用于标记值的位置(请参阅BB common.jam行#820到#861)。