如何为不同分支(或具有不同Clang版本的最新Xcode)使用不同的Xcode版本?

时间:2019-12-06 12:20:17

标签: c++ xcode clang

我们使用不同版本的Xcode编译项目的不同分支,因为它具有内置的c ++编译器“ clang”的不同版本。而且,新的编译器不仅意味着新功能,而且还意味着新的编译器错误(因此有了新的解决方法)。因此,我们希望分支后保持编译器项目的稳定版本,但始终将最新的编译器用于主干

安装多个Xcode版本很容易:我们只需在名称中添加版本号,即可得到:

/Applications/Xcode9
/Applications/Xcode10
/Applications/Xcode11

对于集成服务器和其他脚本,可以轻松选择所需版本并使用

启动
xcode-select -s /Applications/Xcode10.app
xcodebuild -project myproj.xcodeproj build

但是对于使用Xcode作为图形化IDE在不同的分支上工作,这被证明是一个问题:

  • 与Visual Studio解决方案(.sln和.vcxproj)不同,Xcode项目(.xcproj)不支持它们在其中打开的IDE版本的规范。
  • 不同版本的Xcode不能很好地配合使用,并且似乎会覆盖彼此的设置和缓存(例如,处于打开状态的项目/窗口,甚至生成状态)。

我最后的解决方案是始终使用最新的Xcode IDE,但使用较早的编译器版本

Build Options 下似乎有一个项目设置,称为{em> C / C ++ / Objective-C编译器(GCC_VERSION,当通过{ {1}}),其标准值为默认编译器(Apple Clang).xcconfig)。

但是,我找不到可以在此处使用的另一个有效值。到目前为止,我已经尝试了clang version number和clang可执行文件的路径(例如com.apple.compilers.llvm.clang.1_0)。 Xcode总是说不受支持的编译器

那么在Xcode中指定另一个编译器版本的正确方法是什么?还是您知道另一种解决原始问题的方法?

1 个答案:

答案 0 :(得分:0)

我找到了在最新的IDE中使用较旧的clang版本的方法。本示例适用于在Xcode 11.3中使用 Apple LLVM版本10.0.0(clang-1000.11.45.2)

.xcconfig文件中(菜单->文件->新建->文件,“配置设置文件”),可以使用

显式设置编译器路径。
CC = /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CPLUSPLUS = /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang

但这还不够:较新的Xcode安装的系统头文件有时与旧的编译器不兼容。我们需要相应地为这些文件设置根目录

OTHER_CFLAGS = -isysroot /Applications/Xcode10.app/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk