Xcode:构建特定于每个文件编译器构建设置的体系结构

Posted

技术标签:

【中文标题】Xcode:构建特定于每个文件编译器构建设置的体系结构【英文标题】:Xcode: Build architecture specific per file compiler build settings 【发布时间】:2009-10-26 19:55:49 【问题描述】:

在我的 iPhone 项目中,我使用了一些内联 asm,如果目标架构是设备而不是模拟器,则将其排除在外。

由于某些内联 asm 代码仅是 arm 而不是 thumb,我需要在为 iPhone 编译它时指定 c 标志 -marm,否则它会尝试使用 thumb 指令编译代码。

如果我在文件特定的构建设置中输入 -marm 标志,这就是问题,如果我为模拟器编译,gcc 会输出错误:

cc1obj:错误:无法识别的命令行选项“-marm”

只有当目标架构是arm时,有没有办法通过这个选项? 我知道你可以用全局 c 标志来做,但我不想用 -marm 标志编译我的整个项目。我只想要几个 .m 文件是 -marm。

感谢和问候,金

【问题讨论】:

您是否查看了构建日志以确保当 Xcode 从中生成命令时该选项被正确使用? 【参考方案1】:

好的,我找到了解决问题的方法。

这是我添加到代码中的注释:

// the asm code only works with arm not with thumb,
// so if you compile it and gcc trys to compile it as thumb
// you will get an error.
// to make gcc compile the file as arm and not thumb you need
// to add -marm to the files compiler config (select the file
// and press cmd + i and select the build tab and enter there
// the problem is that if you try to compile for the simulator
// it will fail, because intel gcc doesnt know the flat -marm.
// To solve this add a new "User defined setting" in your targets 
// build settings with the name use_marm and give it the value ""
// then add a build setting condition and select Any iPhone OS
// Device and give it the value "-marm"
// In your file's compiler flags add $use_marm
// If you build for the device it will add -marm and if you
// build for the simulator it wont.

【讨论】:

以上是关于Xcode:构建特定于每个文件编译器构建设置的体系结构的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行特定于平台的构建时 Automake 失败

DPDK编程指南(翻译)( 三十一)

如何让 Cargo 执行构建脚本并同时使用特定于目标的链接器?

如何阻止CMake将特定于平台的标志传递给编译器?

为arm64交叉编译googletest

Xcode:全局更改构建设置?