Как определить DOBJC_OLD_DISPATCH_PROTOTYPES в Xcode? - PullRequest
0 голосов
/ 14 июля 2020

Я использую 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. Как это отключить?

введите описание изображения здесь

1 Ответ

1 голос
/ 15 июля 2020

Я не знаю, как работает 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.

У вас есть дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...