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

jwf*_*arn 5 xcode boost bjam

在构建Boost二进制库时bjam,可以通过使用该选项的某些值来指定要使用的编译器,而无需指定特定的编译器版本--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
...
Run Code Online (Sandbox Code Playgroud)

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

也可以使用该选项的某些其他值来指定编译器的特定版本--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=值及其相应标签是什么(不是一般的编译器名称值)?这些记录在哪里?即使Boost尚不支持构建具有某些版本的Boost库,是否已指定了和标记值?darwintoolset

请帮助替换???此表中的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)      ???           ???
Run Code Online (Sandbox Code Playgroud)

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

(2)仅适用于Xcode 3.

(3)仅适用于Xcode 4.

Gra*_*bot 7

从指定的工具集到标记的基础部分有直接映射.因此,对于您指定使用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配置文档).
  3. toolset=darwin-<some_version>场比赛是你在你的配置中指定.
  4. darwin.jam工具集支持根据您尝试构建的内容智能选择编译器,以使其更容易.

例如,我使用类似以下内容进行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
;
Run Code Online (Sandbox Code Playgroud)

我可以:

  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. bjam toolset-darwin architecture=arm target-os=iphone - 使用GCC 4.2进行iPhone设备构建.标签最终也是xgcc42一个碰撞.但是我们可以在这些标签中考虑多少是有限的.而且这通常不是问题,因为无论如何都要跨平台隔离构建的结果.

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

using darwin : 4.2~llvm~gcc : /Xcode-path/user/bin/llvm-g++ ;
Run Code Online (Sandbox Code Playgroud)

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

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