你混淆了多个不同的东西。
如果你想从 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,并使用其他 Apple 特定的 gcc 扩展和 gcc 4.7.1……好吧,您不能。这些对 gcc 的扩展尚未移植到任何较新的版本。如果您想自己完成移植它们的工作,我敢肯定有人会喜欢它,但工作量很大。
如果您想使用 gcc 4.7.1 构建其他人的代码,那么开箱即用的可能性也很大。大多数特定于 Mac 的开源项目都依赖于 Apple gcc 扩展,并且大多数跨平台开源项目都有自动工具设置,可以检测到你在 Mac 上并拥有 Xcode 命令行工具并设置自己依赖于那些扩展名。
那么,您对其中哪些有疑问?
还有一件事:
macosx-version-min 设置与 SDK 完全不同,而且是互补的。
例如,要将 SDK 设置为 10.5,您必须将 -isystem $PATH_TO_10_5_SDK/usr/include 和可能附加的 -isystem 标志传递给 /usr 下的其他目录(例如,对于 C++ stdlib),有时还需要将 -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 构建要容易得多。这是 Apple 明确推荐的。