Конкретные флаги компилятора для определенных файлов в Xcode

Мне было поручено поработать над проектом с некоторыми непонятными атрибутами.

Этот проект по своей природе не компилируется для iPhone Simulator и iPhone Device с теми же настройками компиляции. Я думаю, это связано с необходимостью специальной компиляции для x86 или arm6 / 7 в зависимости от целевой платформы.

Таким образом, параметры сборки проекта при просмотре в представлении параметров сборки Xcode не позволяют мне устанавливать определенные флаги компилятора для конкретных файлов. Однако предыдущий разработчик, работавший над этим проектом, каким-то образом объявил строчку:

CE7FEB5710F09234004DE356 /* MyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7FEB5510F09234004DE356 /* MyFile.m */; settings = {COMPILER_FLAGS = "-fasm-blocks -marm -mfpu=neon"; }; };

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

Итак, чтобы уточнить, вопрос:

Сборка не выполняется при компиляции для симулятора, если я не удалю флаг -fasm-blocks. Сборка не выполняется при компиляции для устройства, если я не добавлю флаг -fasm-blocks. Есть ли способ установить этот флаг для каждого файла, не редактируя файл проекта вручную?


person Jasarien    schedule 04.05.2010    source источник
comment
Вы можете использовать #if !TARGET_IPHONE_SIMULATOR для фильтрации кода asm.   -  person kennytm    schedule 04.05.2010


Ответы (3)


Вы можете определить дополнительные флаги компилятора для отдельных исходных файлов следующим образом:

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

Однако похоже, что лучшее решение в вашем случае - просто продублировать цель и иметь две цели - одну для реального устройства и одну для симулятора. Наследуйте общие параметры сборки на уровне проекта и просто настройте параметры сборки для каждой цели, если это необходимо.

person Paul R    schedule 04.05.2010
comment
Спасибо! Таким образом, это может ответить на другой вопрос, который я собирался задать: как я могу автоматизировать флаг компиляции? Я мог бы настроить этап выполнения сценария, который выполняется перед этапом компиляции источников, и установить значение переменной среды флагов компилятора на основе выходных данных переменной среды целевой платформы. Плоский компилятор должен быть установлен только для одного конкретного файла, поэтому я думаю, что может быть излишним установить две цели и создать флаг компилятора для всего проекта ... - person Jasarien; 04.05.2010

В этом сообщении блога Джошуа Ноззи объясняется, как это сделать. в Xcode 4, где он говорит:

... выберите свой проект в Project Navigator, выберите соответствующую цель (у вас может быть только одна), затем выберите вкладку Build Phases. Разверните фазу компиляции исходников и альт! Столбец Compiler Flags позволяет вам установить флаги каждого файла для этой цели.

person Rob VS    schedule 10.10.2012

Вызовите GetInfo для конкретного файла, вы можете установить там параметры сборки для этого файла. См. Также об этом в Руководстве по управлению проектами XCode.

person Jens    schedule 04.05.2010