Пользовательский шаг сборки Xcode 4 перед компиляцией

Я пытаюсь интегрировать инструмент в Xcode 4, который генерирует заголовок C из файла дескриптора. В Xcode 3 это работало, чтобы добавить пользовательский шаг сборки для файлов с определенным расширением. Затем эти файлы компилируются перед файлами.m /.mm /.cpp, в которые они были включены. Когда я пытаюсь сделать это с Xcode 4, кажется, что он выполняет мой пользовательский шаг после компиляции другого источника. Это не работает, конечно. Есть ли какой-нибудь способ сказать Xcode выполнить шаг раньше?

Вот простая настройка воспроизведения:

Мой main.m содержит:

#include <mytest.h>

и я добавил ${DERIVED_FILE_DIR} в заголовок пути поиска. Когда я компилирую этот проект, я получаю следующее:

Если я удаляю включение и собираю его снова, я получаю это:

Так что правило действительно работает, но выполняется слишком поздно. Есть ли способ изменить это поведение?

3 ответа

У меня уже есть свой значок Возрождения, но здесь идет:)

Я только столкнулся с этой проблемой, и ответ прост (теперь я потратил полдня, уставившись на это).

Правило сборки отвечает на исходный файл (.abc), и исходный файл обрабатывается в том порядке, в котором он указан в шаге сборки "Compile Sources". Просто войдите в правило сборки и перетащите.abc в начало списка.

Надеюсь, один маленький шаг к моему значку археолога.

Вместо добавления правила сборки: на вкладке "Этапы сборки" с помощью кнопки "Добавить этап сборки" выберите "Добавить сценарий запуска". Будет добавлена ​​фаза запуска сценария, в которой вы сможете реализовать требования сценария. Новая фаза сценария запуска может быть перетащена до фазы Compile Sources, когда вы хотите, чтобы ваша функциональность была выполнена.

Вам необходимо добавить явную зависимость между сгенерированным файлом и вашей целью.

Откройте каталог DerivedData в Finder, выберите файл mytest.h и перетащите его в XCode внутри своего проекта. Я обычно создаю новую группу под названием "Производные файлы" и помещаю такие файлы под нее.

Чтобы легко найти каталог DerivedData, я изменяю настройки проекта, чтобы сделать проект каталога относительным (см. Файл -> Настройки проекта, вкладка "Сборка").

После ссылки на файл в проекте его необходимо добавить в основное целевое правило источников компиляции. Выберите основную цель проекта, разверните "Источники компиляции", если он еще не раскрыт, и перетащите вновь добавленный производный файл в список файлов для компиляции.

Наконец, поскольку вы действительно хотите скомпилировать этот файл, вы можете переименовать его в.m или.c вместо.h.

Обновление: на самом деле похоже, что выше не работает все время. Самый надежный способ - использовать фазу сборки вместо правила сборки.

Другие вопросы по тегам