Переменные среды Xcode для подпроектов
В моем текущем проекте Xcode iOS используется ряд статических библиотек. Различные модули кода в статических библиотеках имеют различные уровни отладки, которые я могу включить/выключить с помощью #defines из этого модуля.
Что я хочу сделать, так это отбросить все параметры отладки в библиотеке, а затем установить уровень отладки из родительского проекта. Я хочу сделать это, поэтому любой proj, который использует lib, должен явно включить debug.
Итак, MainProj использует myLib1 и myLib2 и т.д. В myLib1 есть модуль, называемый fooModule. fooModule имеет код отладки, например:
#if FOOMODULE_DEBUG_LEVEL > 0
//debug code, console logs etc
#endif
Я хочу иметь возможность определять FOOMODULE_DEBUG_LEVEL в родительском проекте, поэтому библиотека выбирает его во время сборки и компилирует соответствующим образом.
Я пробовал:
#define FOOMODULE_DEBUG_LEVEL 1
в главном проекте .pch
и я попытался добавить FOOMODULE_DEBUG_LEVEL в качестве пользовательской переменной среды со значением 1. Ни один из них не был выбран субпроектом lib.
Есть ли способ сделать это, или я подхожу к этому неправильно?
Ответы
Ответ 1
вы выполняете это без нескольких определений, создавая файлы xcconfig, а затем ссылаясь на них или #include
на всех своих проектах. поэтому вы можете применить предложение Маттиаса, а затем определить препроцессор defs в xcconfig. то у вас есть один файл для изменения (и полная перестройка, если вам нужны эти defs в файле pch, для которых есть отдельные настройки).
xcode также позволяет назначать отдельные xcconfigs для каждой конфигурации сборки.
Ответ 2
Я бы отредактировал схему и добавил оболочку pre-build script, чтобы установить правильные переменные.
Когда вы добавляете script, вы можете установить, с какой целью вы получаете определения.
Ответ 3
Может быть, добавьте определение, используя настройку сборки "Preprocessor macro", в конфигурации целей и/или отладки/выпуска, где вы хотите включить отладку.
В вашем случае вы дважды щелкните по столбцу значения, а затем нажмите "+", чтобы добавить новый макрос. Марко будет "FOOMODULE_DEBUG_LEVEL = 1", что должно привести к -DFOOMODULE_DEBUG_LEVEL=1
компилятору.
Ответ 4
Решение
1) Цель > Настройки сборки > Макросы препроцессора. Установите переменную среды как препроцессор def для цели (кажется, что она должна быть целевой, а не проектной), например. DEBUG_VARIABLE = 1
2) Проект > Фазы сборки > Добавить фазу сборки. Затем в Run Script экспортируйте переменную:
экспорт DEBUG_VARIABLE
Все подпроекты теперь подбирают эту переменную среды.
Я думаю, что идеальным было бы также использовать предложение Justin о наличии файла .xcconfig со всеми макросами препроцессора, определенными в одном месте, чтобы упростить их редактирование. Для жизни я не могу сделать эту работу. Если я поместил это в файл .xcconfig: GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $(унаследовано)
Затем создайте сборку отладки и/или выпуска в этой конфигурации, переменная среды DEBUG_VARIABLE никогда не будет установлена.