Подтвердить что ты не робот

Переменные среды 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.

Есть ли способ сделать это, или я подхожу к этому неправильно?

4b9b3361

Ответ 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 никогда не будет установлена.