Xcode中针对特定文件的特定编译器标志

9
我被分配了一个有些混乱的属性的项目,涉及到IT技术。该项目在相同的编译设置下无法在iPhone模拟器和iPhone设备上编译。我认为这与需要针对目标平台特定地进行x86或arm6/7编译有关。
因此,在Xcode的构建设置视图中查看项目的构建设置时,不能让我为每个特定的文件设置特定的编译器标志。然而,之前曾在此项目上工作过的开发人员不知何故声明了以下行:
CE7FEB5710F09234004DE356 /* MyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7FEB5510F09234004DE356 /* MyFile.m */; settings = {COMPILER_FLAGS = "-fasm-blocks -marm -mfpu=neon"; }; };

有没有不手动编辑项目文件的方法来实现这一点?我知道手动编辑项目文件可能会导致完全破坏它,所以我宁愿不这样做,因为显然我不像之前的开发人员那样了解得多。
因此,澄清问题:
当编译模拟器时,如果我删除-fasm-blocks标志,则构建失败。当编译设备时,如果我添加-fasm-blocks标志,则构建失败。有没有一种在不手动编辑项目文件的情况下按文件设置此标志的方法?

你可以使用 #if !TARGET_IPHONE_SIMULATOR 来过滤掉汇编代码。 - kennytm
3个回答

9

这篇由Joshua Nozzi撰写的博客文章解释了如何在Xcode 4中完成此操作,他说:

... 在“项目导航器”中选择您的项目,在“相关目标”中选择适当的目标(您可能只有一个),然后选择“生成阶段”选项卡。展开“编译源”阶段,然后就可以设置每个文件的标志了。


7
您可以按照以下步骤为单个源文件定义其他编译器标志:
  • 首先选择要构建的目标
  • 右键单击源文件
  • 选择“获取信息”
  • 点击“构建”选项卡
  • 定义您的其他编译器标志
然而,在您的情况下,更好的解决方案似乎是复制目标并拥有两个目标——一个用于实际设备,另一个用于模拟器。从项目级别继承公共构建设置,并根据需要调整每个目标的构建设置。

这可能可以回答我原本要问的另一个问题,即如何自动化编译标志?我可以设置一个运行脚本阶段,在编译源代码阶段之前运行,并根据目标平台环境变量的输出设置编译器标志环境变量的值。编译器标志只需要在一个特定的文件上设置,所以我认为建立两个目标并创建项目范围的编译器标志可能有点过头了... - Jasarien

2

通过调用 GetInfo 方法来针对特定文件设置构建设置。关于此,请参阅 XCode 项目管理指南。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接