XCode компилирует весь проект каждый раз, когда я запускаю - PullRequest
5 голосов
/ 29 сентября 2011

В новом проекте, который я начал, XCode решил, что он будет компилировать каждый файл в проекте каждый раз, когда я его запускаю, а не просто компилировать изменяющиеся файлы (и файлы, зависящие от них).Поскольку в проекте становится все больше и больше файлов, это становится все более и более тяжелым бременем как по времени, так и по времени автономной работы.

Возможно, я где-то изменил настройку, которая повлияла на это;а может и нет.Какие настройки проекта мне нужно посмотреть?

Ответы [ 2 ]

7 голосов
/ 04 ноября 2011

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

В любом случае, я наткнулся на этот вопрос во время моих (неудачных) попыток найти ответ в Google и решил поделиться своим решением.

7 голосов
/ 21 октября 2011

Если XCode перекомпилирует большинство или все ваши исходные файлы всякий раз, когда вы делаете сборку, это обычно означает, что все эти файлы прямо или косвенно зависят от некоторого файла заголовка, который изменился.Вот некоторые вещи, которые нужно искать:

  1. Ваши исходные файлы имеют тенденцию к #import некоторому заголовочному файлу верхнего уровня, который сам рекурсивно импортирует кучу заголовочных файлов нижнего уровня?Если какой-либо файл в этом дереве зависимых заголовков будет изменен, это вызовет перекомпиляцию любого файла .m, который импортирует файл заголовка верхнего уровня.Вы можете уменьшить эти зависимости, импортировав заголовки для подмодулей более низкого уровня или, что еще лучше, только для конкретных заголовков, необходимых для каждого файла.(Примечание. Некоторые библиотеки, которые не предназначены для такого использования, могут сделать этот подход сложным или невозможным в некоторых случаях.)

  2. Некоторые сторонние инструменты разработки и статические библиотеки запускают сценарии, которыегенерировать или изменять код как часть процесса сборки.Если ваши исходные файлы зависят от файла заголовка, сгенерированного сценарием, они будут перекомпилироваться каждый раз, когда сценарий восстанавливает этот файл заголовка.Даже если код, сгенерированный сценарием, не изменится, зависимые исходные файлы будут перекомпилированы, если изменится дата последнего изменения файла заголовка.Если это ваша проблема, для устранения избыточной компиляции может потребоваться некоторый хитрый взлом.

  3. Не забудьте проверить файл предварительно скомпилированного заголовка (.pch), чтобы увидеть, что там импортируется.Содержимое этого файла эффективно внедряется в начало каждого файла .m в вашем проекте во время компиляции.

  4. Старайтесь минимизировать зависимости, перемещая как можно больше операторов #import.ваших .h файлов и в ваши .m файлы.Обычно вы можете просто импортировать заголовки для суперкласса вашего класса и любых протоколов, которые ваш класс реализует в своем файле .h.Вы можете использовать предварительные объявления вместо #import операторов для любых других классов, типов данных или протоколов, которые вы используете в @interface.

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