Включение макроса ifdef, используемого в статической библиотеке - PullRequest
2 голосов
/ 20 июля 2011

Можно ли использовать макросы, определенные в статических библиотеках?

У меня есть собственный макрос отладки под названием TWDEBUG, который я использую в статической библиотеке, которую я создаю для совместного использования. Если я импортирую статическую библиотеку в свой новый проект и использую ее, компилятор, похоже, не распознает ее. Я установил макросы препроцессора на TWDEBUG и Other C flags и Other C++ flags на -TWDEBUG, но когда я запустил код, макрос ifdef не выполняется.

1 Ответ

7 голосов
/ 20 июля 2011

Макросы оцениваются во время компиляции.Поэтому их значения замораживаются при сборке статической библиотеки.Для оператора отладки это обычно означает, что они опущены и не входят в составную библиотеку.

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

Обновление:

Итак, для реализации опции отладки я вижу два варианта:

  1. Вместо макросов и ifdefs вы используете глобальную переменную и соответствующие if для включения и выключения отладки.Другие разработчики могут использовать API (глобальную функцию) для установки уровня отладки, чтобы можно было скрыть глобальную переменную.

  2. Создать две статические библиотеки из одного и того же исходного кода, одну с включенной отладкой дляцели разработки и другие с отключенной отладкой для производственного использования.Эта опция, вероятно, возможна, только если XCode может автоматически переключаться между двумя библиотеками.И на данный момент я не знаю, как бы вы это настроили.

...