【问题标题】:Xcode JIT compiler ignores some preprocessor macrosXcode JIT 编译器忽略了一些预处理器宏
【发布时间】:2012-12-18 12:16:14
【问题描述】:

这个问题让我发疯了,它几乎肯定与 Xcode 中的一些错误有关,但也许有一些我不熟悉的解决方法或者我可能忽略了的东西。就是这样:

我们为不同的子项目提供了多个构建目标,这些目标生成具有部分重叠代码的单独可执行文件。为了排除不应该进入一个或另一个应用程序的某些代码位,我们在每个子项目的相应 .pch 文件中定义了许多 #define 宏,例如在 main-app.pch

#ifndef MY_APP
    #define MY_APP 1
#endif

sub-app.pch

#ifndef SUB_APP
    #define SUB_APP 1
#endif

然后,在一些代码中,你会看到

- (void)doSomething
{
#ifdef MY_APP
    NSLog(@"This is just an example");
#endif
}

现在,问题是 Xcode 有时,即仅在 一些 机器上,不做语法高亮或条件编译代码的代码完成。也就是说,对于我的同事来说,它工作得非常好,而无论我做什么,我都没有看到语法突出显示。作为记录,我们都在 Xcode 4.5.2 上。我尝试删除派生数据和重新索引,改组目标/模式的顺序,并将预处理器宏放在项目和目标设置中,而不是 .pch 文件中,但似乎没有任何帮助。有人知道这里发生了什么吗?

【问题讨论】:

  • 附加信息:问题似乎是 Xcode 对文件属于哪个目标感到困惑,如果该文件是多个子项目的一部分。即使我将 X 设置为当前构建目标,jit 编译器也会编译它,就好像我有项目 B 并设置了目标 Y。
  • 其实问题似乎是项目A和B之间存在构建依赖,所以B在A之前编译,所以两个项目中出现的文件都先编译为B,并且然后再也没碰过。

标签: objective-c


【解决方案1】:

在这个烦人的问题上花费了大部分时间之后,我找到了一种“解决方案”:使用 Xcode 工作区而不是子项目来处理所有属于同一个应用程序包的独立可执行文件。我现在没有创建构建依赖项,而是在当前方案的“构建”部分添加额外的目标(Product->Edit scheme...)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多