【问题标题】:"Unsupported architecture" when building iOS app and running Mac makefile构建 iOS 应用程序和运行 Mac makefile 时出现“不支持的架构”
【发布时间】:2014-02-19 19:11:10
【问题描述】:

作为构建 iOS 应用程序的 Xcode 构建阶段,我使用 makefile 来构建大量其他东西作为依赖项(比设置许多我发现的复杂 Xcode 构建规则更容易)。

makefile 中的一个步骤现在包括构建一个 Mac 命令行应用程序,该应用程序需要为应用程序处理和打包一些资产。

不幸的是,当 make 在 Xcode 中运行时,一些环境变量似乎被传递给它,因此当它尝试从外部 makefile 编译 Mac 应用程序时,似乎认为架构应该是 iPhone 而不是 Mac。

我的makefile很简单:

APP_NAME = myAppName
SOURCE = main.m

$(APP_NAME): $(SOURCE)
    cc -fobjc-arc -framework Foundation -framework Cocoa -o $(APP_NAME) $(SOURCE)

那么,问题来了:

如何强制 clang 使用本机架构而不是环境中似乎存在的架构?

编辑:或者:make 不承担似乎是从 Xcode 传递的环境?

我所看到的:

在构建 iOS 应用程序时,对于非常低级别的标头(例如,首先是 cdefs.h),我收到大量错误提示“不支持的架构”。当我仔细观察时,很明显这是在构建 Mac 工具的 main.m 时。像往常一样在命令行上运行make 时,它构建得非常好 - 似乎只有在通过 Xcode 构建时我才会遇到这个问题。

【问题讨论】:

  • 如果您确定哪些环境变量不好,您可以在 make 中重新设置这些变量。要查看环境变量的完整列表,您可以(可能来自 makefile 中的规则)运行类似 env | sort 的内容。然后假设您注意到一个 env.var。 MAKE_ME_AN_IPHONE=true 你可以在你的 makefile 中添加 MAKE_ME_AN_IPHONE = 或者,如果你有足够新的 GNU make 版本,unexport MAKE_ME_AN_IPHONE 可以去掉那个值。
  • 谢谢!我的解决方案结果是相似的,但并不完全相同......

标签: ios xcode macos makefile clang


【解决方案1】:

为了在“香草”环境中运行make,我在调用它时使用了以下技巧:

env -i PATH='$(PATH)' LANG='$(LANG)' make

...如本答案所述:How to prevent make from communicating any variable to a submake?

来自 env 的手册页:“选项 '-i' 导致 env 完全忽略它继承的环境。”

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2019-04-21
    • 2021-04-19
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    相关资源
    最近更新 更多