2012-12-18 3 views
0

Эта проблема сводит меня с ума, и это почти наверняка связано с некоторой ошибкой в ​​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, но ничего не помогает. Кто-нибудь знает, что здесь происходит?

+0

Дополнительная информация: проблема заключается в том, что Xcode путается о том, к какой цели принадлежит файл, если этот файл является частью нескольких подпроектов. Несмотря на то, что X установлен как текущая цель сборки, компилятор jit компилирует его так, как если бы у меня был проект B с заданным набором Y. – DaGaMs

+0

На самом деле проблема заключается в том, что между проектами A и B существует зависимость сборки, поэтому B скомпилируется до A и поэтому файлы, которые встречаются в обоих проектах, сначала скомпилированы как B, а затем никогда не трогаются снова. – DaGaMs

ответ

0

Проведя большую часть дня по этой назойливой проблеме, я нашел свое «решение»: используйте рабочие пространства Xcode вместо подпроектов для независимых исполняемых файлов, которые все принадлежат одному и тому же набору приложений. Вместо создания зависимостей построения теперь добавляю дополнительные цели в части «Сборка» текущей схемы (Продукт ->Редактировать схему ...).

Смежные вопросы