Это не ответ сам по себе, но кое-что интересное я обнаружил, борясь с этой же проблемой.
У меня есть статическая библиотека (MyLib
), которая содержит заголовок для ведения журнала (Log.h
).У меня есть проект приложения (MyApp
), который использует MyLib
.Log.h
имеет некоторое сходство с этим:
#ifdef LOG_LEVEL_DEBUG
# define LogDebug(...) NSLog(__VA_ARGS__)
#else
# define LogDebug(...)
#endif
В MyApp
настройках сборки я могу использовать макрос препроцессора LOG_LEVEL_DEBUG
, чтобы успешно выключить и включить ведение журнала.Это работает, когда я использую LogDebug()
в исходных файлах, найденных в MyApp
.Однако исходные файлы MyLib
, использующие LogDebug()
, не затрагиваются настройками сборки MyApp
.Я должен использовать настройки сборки MyLib
, чтобы повлиять на LogDebug()
в исходных файлах MyLib
.
Я почти уверен, что знаю, что происходит, но я был бы готов к исправлению.Ниже приведен сценарий, в котором MyApp
определяет LOG_LEVEL_DEBUG
в настройках сборки (включение отладки), а MyLib
не определяет его (отключение).
При сборке MyApp
сначала компилируется MyLib
где все LogDebug()
заменены в исходных файлах MyLib
как no-op
(так как LOG_LEVEL_DEBUG
не было определено).После компиляции MyLib
компилируется MyApp
, и все методы LogDebug()
в MyApp
source заменяются операторами NSLog()
, поскольку LOG_LEVEL_DEBUG
было определено в настройках сборки.