你混淆了多种不同的东西。
如果你想从 Xcode 切换到 vim,你可以……去做。如果您已经安装了 Xcode 命令行工具,那么您的路径上就有 gcc、make 等,它们会正常工作,而且您根本不必考虑 Xcode。事实上,您甚至可以安装命令行工具而不需要 Xcode 的其余部分。
如果你想从 Xcode 工具链切换到不同的工具链,或者使用混合工具链,你可以这样做。你已经安装了 gcc 4.7.1。好的,现在使用gcc_select
, 或export CC=/usr/local/bin/gcc-4.7.1
, 或硬编码你的 makefile 中的路径,或者任何你想要的。这与在任何其他 POSIX 平台上拥有多个工具链没有什么不同。
如果您想在不运行 Xcode 的情况下构建 Xcode 项目,可以xcodebuild
从命令行使用。
如果您想将现有项目从 Xcode 转换为 Makefile(或 cmake 或其他),您必须手动执行此操作。通常这并不难,除非项目非常复杂或做了很多 Xcode 特定的事情。您可以从构建输出中看到 Xcode 正在运行的所有实际命令。
如果你想学习如何创建 Makefile,那里有很多很好的教程。但第一个问题是:为什么?学习一些更容易的东西,比如 cmake 是否可以接受,或者这里的全部目标是学习 make?
如果您想进行基于 SDK 的开发,请通过-arch
gcc 4.7.1 传递并使用其他 Apple 特定的 gcc 扩展……好吧,您不能。这些对 gcc 的扩展尚未移植到任何较新的版本。如果您想自己完成移植它们的工作,我敢肯定有人会喜欢它,但工作量很大。
而且,如果您想使用 gcc 4.7.1 构建其他人的代码,那么很有可能也无法开箱即用。大多数特定于 Mac 的开源项目都依赖于 Apple gcc 扩展,并且大多数跨平台开源项目都有自动工具设置,可以检测到你在 Mac 上并拥有 Xcode 命令行工具并设置自己依赖于那些扩展名。
那么,您对其中哪些有问题?
还有一件事:
该macosx-version-min
设置与 SDK 完全不同,而且是互补的。
例如,要将 SDK 设置为 10.5,您必须为其他目录(例如,对于 C++ stdlib)传递-isystem $PATH_TO_10_5_SDK/usr/include
和可能的附加标志,有时将标志传递给链接器,有时将标志传递给编译器和/或链接器。-isystem
/usr
-L
-F
您还必须拥有SDK。获得 10.5 SDK 的唯一方法是使用 Xcode 3.2.6 或更早版本——我认为您甚至无法在 Mountain Lion 上安装它。此外,来自 Xcode 3.2.6 的 10.5 SDK 不知道如何在 10.6 之后的构建系统上工作,因此您必须手动破解它(主要是创建一堆符号链接,使其将 10.7 和 10.8 视为相同) 10.6)。而且,如果您使用的是非 Apple gcc,它也会在尝试查找各种内容时感到困惑,例如特定于编译器的标头(尤其是对于 C++),因此您需要对其进行更多修改。
为什么这么难?因为您几乎从不需要这样做,而 Apple 特别建议您不要这样做。它是他们过去建议在 10.4 天内做事的方式遗留下来的——但仅仅因为它存在并不意味着你应该使用它。
构建在 10.5 上运行的代码的正确方法是-macosx-version-min=10.5
. 您可以而且实际上应该将它与与您的操作系统匹配的 SDK 一起使用(或者甚至可能是更新的 SDK,如果您希望能够使用下一个操作系统版本中的功能)。同样,这个标志可能只支持 clang 和 Apple 扩展的 gcc。但它使 SDK 中的所有内容都以向后兼容的模式神奇地工作。当然,除了在 10.6 或更高版本中添加的新功能 - 如果您尝试在 10.5 机器上进入全屏模式,您只会遇到异常或崩溃。Apple 有很好的文档说明哪些 API 添加到哪个版本,以及检查每种 API(Cocoa、CoreFoundation 和 POSIX)的正确方法。当然,您需要一台真正的 10.5 机器(或 VM)来进行测试。此外,C++ 标准库(仅限 10.5)存在一些错误,以及一些像 OpenSSL 这样的库,Apple 不再建议任何人针对系统副本构建以进行分发。但它仍然比尝试使用 10.5 SDK 构建要容易得多。这是苹果明确推荐的。