Эта проблема сводит меня с ума, и это почти наверняка связано с некоторой ошибкой в Xcode, но, возможно, есть кое-какое обходное решение, с которым я не знаком или что-то, что я мог упустить. Вот он:Xcode JIT-компилятор игнорирует некоторые макросы препроцессора
У нас есть несколько целей сборки для разных подпроектов, которые генерируют отдельные исполняемые файлы с частично перекрывающимся кодом. Чтобы исключить определенные биты кода, которые не должны входить в одно или другое приложение, мы определяем количество макросов #define
в соответствующих файлах .pch для каждого подпроекта, например. в главном-app.pch
#ifndef MY_APP
#define MY_APP 1
#endif
и суб-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. – DaGaMs
На самом деле проблема заключается в том, что между проектами A и B существует зависимость сборки, поэтому B скомпилируется до A и поэтому файлы, которые встречаются в обоих проектах, сначала скомпилированы как B, а затем никогда не трогаются снова. – DaGaMs