gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:52:10 26 4
gpt4 key购买 nike

使用 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?)

我的问题是,Xcode 中特定编译器版本的其他一些 bjam --toolset= 值及其相应标签是什么Mac 上的 Xcode 3 和 Xcode 4(不是darwin 这样的通用编译器名称值)?这些记录在任何地方吗?即使 Boost 尚不支持构建某些版本的 Boost 库,是否已指定工具集和标签值?

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

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 行)。所以有几点:

  1. 对于 Xcode,它始终是 toolset=darwin默认g++ .
  2. 对于其他非默认版本,您必须设置 site-config.jamuser-config.jam告诉 Boost Build 您拥有的编译器在哪里以及有哪些(请参阅 BB Configuration 文档)。
  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
;

为此我可以:

  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++ ;

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

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

关于xcode - Apple 编译器的 `bjam --toolset=` 和标记值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com