我们使用不同版本的 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 Solutions(.sln和.vcxproj(不同,Xcode Projects(.xcproj(不支持它们打开的IDE版本的规范。
- 不同版本的 Xcode 不能很好地协同工作,并且似乎会覆盖彼此的设置和缓存(例如,打开了哪些项目/窗口,甚至构建状态(。
我解决这个问题的最后希望是始终使用最新的 XcodeIDE,但让它使用早期的编译器版本。
在"构建选项">下似乎有一个项目设置,称为C/C++/Objective-C编译器(通过.xcconfig
设置时GCC_VERSION
(,标准值为默认编译器 (Apple Clang( (com.apple.compilers.llvm.clang.1_0
(。
但是,我无法找到可以在那里使用的另一个有效值。到目前为止,我已经尝试了 clang 版本号和 clang 可执行文件的路径(例如/Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
(。Xcode 总是说不受支持的编译器。
那么在 Xcode 中指定另一个编译器版本的正确方法是什么?或者你知道另一种解决原始问题的方法吗?
我找到了一种在最新的 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