Как включить код в сборку только при установленном флаге? - PullRequest
1 голос
/ 13 июня 2011

Я добавил отладочный код в свое приложение, которое я хочу вызывать только при необходимости.Я помню, что есть какой-то IFDEF, который можно использовать для условного включения кода в исходный файл.

Например, у меня может быть что-то вроде этого:

IFDEF kDebugEnabled == YES {
    // some debugging code here
}

И тогда этокусок кода компилируется в двоичный файл только в том случае, если kDebugEnabled имеет значение YES.

Как мне сделать что-то подобное?

Обратите внимание: я не хочу использовать настройки флага компилятора проекта,Я просто хочу определить BOOL (или что-то, что также служит цели), которая является истинной или ложной, а затем просто легко установить ее, например, в моем делегате приложения.Мне трудно перейти к настройкам компилятора проекта, найти флаг и затем установить его.Я знаю, что есть флаг отладки, который может быть полезен.

Ответы [ 2 ]

5 голосов
/ 13 июня 2011

Что вы ищете:

#ifdef __YOURSYMBOL__
  <conditional code>
#endif

Вы можете программно определить __YOURSYMBOL__ следующим образом:

 #define __YOURSYMBOL__

__YOURSYMBOL__ может быть любой строкой, которая имеет смысл для васчтобы помнить, почему вы включаете / исключаете этот фрагмент кода.

Константа DEBUG - это специальная константа препроцессора, которую компилятор определяет специально для вас, когда код создается для отладки, поэтому вы можете просто использовать ее:

#ifdef DEBUG
         <conditional code>
#endif

Примите во внимание, что вы используете C-препроцессор, а не C или Objective-C, поэтому тест вроде kDebugEnabled == YES (где kDebugEnabled - это переменная Objective-C)просто не возможно.Вы можете определить целочисленные значения для ваших констант, например:

#define __LOG_LEVEL__ 3

, а затем проверить его:

#if __LOG_LEVEL__ == 3
    ...
Endif
3 голосов
/ 13 июня 2011

Насколько я знаю, в ваших классах не может быть кода, который не скомпилирован в конечный продукт без использования флагов компилятора. Однако использовать флаг DEBUG намного проще, чем вы думаете. Если вы используете Xcode 4, он настроен для вас по умолчанию.

#ifdef DEBUG

  // Your debug-only code goes here

#endif // DEBUG

По умолчанию Xcode имеет две конфигурации: Debug и Release. Когда вы используете конфигурацию отладочной сборки, помимо прочего, она устанавливает флаг компилятора DEBUG, который затем можно использовать для условной компиляции кода. Нет необходимости возиться с настройками компиляции.

...