加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – `bjam –toolset =`和Apple编译器的标签值?

发布时间:2020-12-14 17:55:44 所属栏目:百科 来源:网络整理
导读:使用bjam构建Boost二进制库时,可以通过使用–toolset =选项的某些值来指定要使用的编译器,而不指定特定的编译器版本.例如: bjam –with-serialization –toolset = msvc 工具集值msvc告诉bjam在系统中搜索某些版本的Microsoft Visual C,然后使用它来构建Boo
使用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库,是否已指定工具集和标记值?

请帮助替换此表中的??? 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)Apple生产自己版本的GCC和LLVM编译器,以添加特定于Apple的扩展和行为.

(2)仅适用于Xcode 3.

(3)仅适用于Xcode 4.

解决方法

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

>对于Xcode,默认g将始终为toolset = darwin.
>对于其他非默认版本,您必须设置site-config.jam或user-config.jam来告诉Boost Build您在哪里以及哪些编译器(请参阅BB Configuration文档).
>工具集= darwin-< some_version>匹配您在配置中指定的内容.
> 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
;

我可以:

> bjam toolset = darwin-4.0 – 对于使用GCC 4.0的常规OSX构建.这导致标签xgcc-42.
> bjam toolset = darwin-4.2 – 类似于OSX和GCC 4.2.我将获得xgcc-42的标签.
> 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++ ;

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读