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

标签 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 下似乎有一个项目设置,称为 Compiler for C/C++/Objective-C (GCC_VERSION 当通过 .xcconfig) 使用标准值 Default Compiler (Apple Clang) (com.apple.compilers.llvm.clang.1_0) 进行设置。

但是,我无法找到我可以在那里使用的另一个有效值。到目前为止,我已经尝试过 clang version number和 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 文件中(Menu->File->New->File, "Configuration Settings File"),编译器路径可以明确设置

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

关于c++ - 如何为不同的分支使用不同的 Xcode 版本(或具有不同 Clang 版本的最新 Xcode)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213044/

相关文章:

ios - Cordova ,iOS 深色键盘?

ios - NSURLSession 标签不更改文本 swift xcode 6

gcc - Clang 的 'scan-build' 实用程序不适用于 'make'

c++11 - 禁用 clang C++11 警告

android - 为 Android 构建 OpenSSH

使用 c 库的 C++ 程序 - 将智能指针转换为原始 c 样式指针?

iphone - Photobucket iOS 集成

C++ 通过指针访问私有(private)函数

c++ - std::cout 改变变量值

c++ - 计算表示稀疏 vector 的 map 之间的距离 C++