【问题标题】:What is the difference between MACOSX_DEPLOYMENT_TARGET and -mmacosx-version-min?MACOSX_DEPLOYMENT_TARGET 和 -mmacosx-version-min 有什么区别?
【发布时间】:2014-10-10 17:19:52
【问题描述】:

我经常需要针对比我当前运行的版本更旧的 Mac OS X 版本。因为我更喜欢使用 bash shell 和 Makefile,所以我不使用 Xcode。 Apple explicitly supports targeting older OS X versions,但我一直对通常针对旧平台采取的两个配置步骤的冗余感到困惑:

  1. gcc 使用 --macosx-version-min:

    启动
    gcc --mmacosx-version-min=10.6 ....
    
  2. MACOSX_DEPLOYMENT_TARGET 环境变量设置为所需的平台,例如

    export MACOSX_DEPLOYMENT_TARGET=10.6
    

当试图通过搜索找出两者之间的实际区别时,您会得到不同的答案。 Some people 说他们做的完全一样,所以只需要使用两者之一。但是,也有voices 表示必须同时执行这两个操作:使用--macosx-version-min 启动gcc 设置环境变量。

这两件事完全一样吗?是否只需要使用两者之一而不是两者?是否有一些官方文档可用? Apple mentions MACOSX_DEPLOYMENT_TARGET 但根本没有提到 --macosx-version-min,尽管它似乎更常见。

【问题讨论】:

  • 据我所知,这两种方法都适用于 macOS 直到 10.14 (Mojave)。查看一些对我不利的开源项目,似乎 10.15 (Catalina) 和更新版本中的构建环境仅支持 MACOSX_DEPLOYMENT_TARGET。 (我没有在 10.15 或更高版本上测试过自己。)

标签: macos gcc backwards-compatibility


【解决方案1】:

Mac OS X 上 gcc 的手册页说它们是同义词:

-mmacosx-version-min=version
The earliest version of MacOS X that this executable will run on is
version.  Typical values of version include 10.1, 10.2, and 10.3.9.

This value can also be set with the MACOSX_DEPLOYMENT_TARGET environment
variable.  If both the command-line option is specified and the
environment variable is set, the command-line option will take precedence.

【讨论】:

  • Apple 切换到 Clang 后,GCC 标志比使用 MACOSX_DEPLOYMENT_TARGET 的“同义性更少”;)
【解决方案2】:

请记住,苹果将默认编译器更改为 clang。目前 clang 试图将 gcc 标志翻译成他自己的。但它不能覆盖 100%。所以--mmacosx-version-min 有可能有一天会停止工作。

【讨论】:

  • 是的,看起来现在是时候了,我试过了 --mmacosx-version-min 不再为我工作了,而 MACOSX_DEPLOYMENT_TARGET 现在正在工作
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2021-11-22
  • 2022-10-13
  • 2021-06-17
  • 2021-06-27
相关资源
最近更新 更多