Xcode:根据文件编译器构建设置构建特定于体系结构

时间:2009-10-26 19:55:50

标签: iphone objective-c xcode gcc compiler-flags

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

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

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

  

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

只有当目标架构是arm时才有办法传递此选项吗? 我知道你可以使用全局c标志来完成它,但我不想用-marm标志编译我的整个项目。我只想要几个.m文件是-marm。

谢谢和问候,金

1 个答案:

答案 0 :(得分:0)

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

以下是我在代码中添加的评论:

// 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.