代码之家  ›  专栏  ›  技术社区  ›  jwfearn

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

  •  5
  • jwfearn  · 技术社区  · 15 年前

    当构建Boost二进制库时, bjam ,可以指定要使用的编译器, 没有 通过使用特定的编译器版本 --toolset= 选择权。例如:

    bjam --with-serialization --toolset=msvc

    这个 工具集值 msvc 讲述 BJAM 搜索您的系统 一些 微软Visual C++版本,然后使用它来构建Boosiv.序列化库的许多变种。生成的库将包含一个标记,指示实际使用了哪个工具集。例如,上面的命令创建文件,例如:

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

    哪里的字符串 vc100 在文件名中是 工具集标签 表示 微软Visual C++ 2010 已找到编译器版本并用于生成库。[可以找到有关Boost库文件命名约定的更多详细信息 here. ]

    也可以指定 具体的 使用某些其他值的编译器版本 ——工具集= 选择权。例如:

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

    讲述 BJAM 尽管我的系统中可能有几个编译器,但我希望它能专门使用 微软Visual C++ 2008 . 生成的库包含标记字符串 vc90 以表明 微软Visual C++ 2008 是用来建造它们的。

    对于Mac上更新的编译器,boost文档似乎有点过时(例如,如何区分gcc、llvm-gcc和llvm?)

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

    请帮忙更换 ??? S在此表中:

    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)苹果生产自己版本的gcc和llvm编译器,以添加特定于苹果的扩展和行为。

    (2)仅在Xcode 3中可用。

    (3)仅在xcode 4中可用。

    1 回复  |  直到 15 年前
        1
  •  6
  •   GrafikRobot    15 年前

    从指定的工具集到标记的基础部分有一个直接映射。因此,对于您指定使用 darwin.jam 工具集标记的开始将始终是 xgcc (对于Xcode GCC)。第二部分,即编译器的版本号,通常是从编译器本身自动发现的。这个 达尔文果酱 工具集代码使用 -dumnpversion 用于发现该版本的选项(请参见 darwin.jam 第123行)。所以有几点:

    1. 对于Xcode来说 toolset=darwin 对于违约 g++ .
    2. 对于其他非默认版本,必须设置 site-config.jam user-config.jam 告诉Boost Build您拥有的编译器在哪里和哪些(请参见 BB Configuration 文档)。
    3. 这个 toolset=darwin-<some_version> 匹配您在配置中指定的内容。
    4. 这个 达尔文果酱 工具集支持根据您试图构建的内容对编译器进行智能选择,以使其更简单。

    例如,我在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 --对于使用GCC4.0的常规OSX构建。导致标签 xgcc-42 .
    2. bjam toolset=darwin-4.2 --与OSX和GCC4.2类似。我会得到一个标签 XGCC-42 .
    3. bjam toolset-darwin architecture=arm target-os=iphone --使用GCC4.2构建iPhone设备。标签最后也会 xgcc42 这是碰撞。但是在这些标签中我们可以占多少是有限制的。而且,这通常不是问题,因为不管怎样,一个将构建的结果跨平台分离。

    通过添加到配置中,您可以使用LLVM编译器之一进行设置:

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

    并调用 bjam toolset=darwin-4.2~llvm~gcc . 不幸的是,标签也会 xgcc-4.2 (同样,它是基于使用 达尔文果酱 )因此,您需要将生成的lib与其他gcc构建分离。

    同样不幸的是,除了在代码中之外,没有记录在案的将工具集映射到标记值的位置(参见bb common.jam 线路820至861)。

    推荐文章