Где я могу определить символы, протестированные с помощью {$ ifdef}?

StackOverflow https://stackoverflow.com/questions/4530312

Вопрос

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

{$IFDEF something}
.
.
.
{$ENDIF}

Где мне назначить слово «что -то» в проекте? Я попробовал в некоторых местах в вариантах проекта, но это не сработало. Думаю, я не нашел правильный.

Это было полезно?

Решение

Это в Условные определения Слот под проектом | Варианты, которые выглядят так на D2010:

Delphi Project Options dialog

Другие советы

Другие ответы указали вам в местах для определения символов и последствий масштабов различных подходов.

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

Когда вы «компилируете», компилятор Delphi будет компилировать только единицы, которые сами изменились с момента предыдущего компиляции. Если вы измените определение символов, это не изменяет каких-либо проектных единиц, поэтому, если единицы не будут повторно скомпилированы, изменение в определении символов не будет иметь никакого эффекта в этих единицах.

Чтобы заставить изменения в определении символов, которые применяются во всех единицах, вы должны «строить», а не компилировать.

Это может объяснить, почему ваша попытка определить, казалось, не сработала ранее

Вы также можете определить их в {$ defineu003Csymbol> } Директивы. Что меняет сфера. Когда вы определяетеu003Csymbol> В условиях определения в опциях проекта, область масштаба является глобальной для всего проекта. $ Определить директивы действительны только с точки зрения, которые они объявлены до конца текущего модуля, или до тех пор, пока директива $ undef с использованием той же самойu003Csymbol> встречается. Что использовать, зависит от ваших потребностей и того, что делает IFDEF.

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

  1. В вариантах проекта (как уже сказал Дэвид Хеффернан)
  2. в файл включения, который включен в все из этих подразделений

Почему я упоминаю второй вариант? Потому что это позволяет специализированную обработку на основе условного определения Verxxx и других условных определений, приведенных в 1. См. Jedi.inc (от Jedi JCL) для примера.

Кроме того, как сказал Deltics: когда он определяет, какие единицы перекомпилируют, компилятор только проверяет, изменилось ли само устройство, а не о том, изменились ли условные определения или какие -либо файлы. Поэтому, если вы измените условные определения, вы должны сделать перестройку, а не просто перекомпилировать. Поскольку компилятор Delphi очень быстрый, это, к счастью, не имеет большого значения для времени компиляции.

Вы можете определить глобальные символы во внешнем файле с расширением .inc. Создайте новый текстовый файл, вставьте все, что вы определяете, и сохраните его, как, например, предварительные определения.inc:

--- Содержимое файла prefefines.inc ---

{$DEFINE Symbol}
{$IFDEF Symbol}
  {$DEFINE AnotherSymbol}
{$ENDIF}

В ваших модулях Delphi, где вам нужно проверить, определены символы, поместите этот код в раздел интерфейса:

interface

{$I Predefines.inc}

uses ...

// Check you defines

{$IFDEF Symbol}
...
{$ENDIF}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top