首页 > 解决方案 > 如何在 Xcode 中定义 DOBJC_OLD_DISPATCH_PROTOTYPES?

问题描述

我使用 Xcode 11 并且需要复制这个编译器命令:

cc -g -Wall -Wall -Wextra -std=c99 -pedantic \
    -DOBJC_OLD_DISPATCH_PROTOTYPES -c -o example.o example.c

OBJC_OLD_DISPATCH_PROTOTYPES没有价值的用户定义宏添加到构建设置没有帮助。通过告诉我它已经通过命令行由 Xcode 定义,在源代码中定义它也失败了。尽管设置了一些可疑的标志No,但 Xcode 似乎仍在执行#define OBJC_OLD_DISPATCH_PROTOTYPES 1。我怎样才能禁用它?

在此处输入图像描述

标签: c++xcodeclang

解决方案


我不知道 Xcode 是如何工作的,但我看到了两点。

在您发布的图像中,您要求定义类似DOBJC_OLD_DISPATCH_PROTOTYPES,但在命令行中您显示它是OBJC_OLD_DISPATCH_PROTOTYPES。你想定义哪一个?(注意D图像中的第一个:它不在命令行中。)

第一个D命令行参数将是:

-DDOBJC_OLD_DISPATCH_PROTOTYPES

(这-D定义,其余的是定义。)

通常,该定义应在预处理器选项中进行,而不是在编译器中。你可以在这里看到一个例子,虽然我不知道这个例子是否过时了。(应该有一个选项来设置预处理器定义。)

如果 Xcode 无论如何都将其定义为1,您可以在需要时重新定义它:

#ifdef OBJC_OLD_DISPATCH_PROTOTYPES
#undef OBJC_OLD_DISPATCH_PROTOTYPES
#define OBJC_OLD_DISPATCH_PROTOTYPES
#endif

(或DOBJC_OLD_DISPATCH_PROTOTYPES。)

那将摆脱1.

你有更多信息在这里


推荐阅读