Как отключить предупреждения от данного модуля без изменения этого модуля? - PullRequest
6 голосов
/ 04 июля 2011

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

Существует ли какая-либо директива компилятора, которая позволила бы мне отключить эти предупреждения?Но учтите, что я не хочу изменять эти юниты каким-либо образом.Я хотел бы добиться чего-то вроде этого:

unit MyUnit;

interface

uses
  UnitA, {$WARN EMIT_WARNNIGS OFF} UnitB, {$WARN EMIT_WARNNIGS ON} UnitC, UnitD.

implementation

uses
  UnitE, {$WARN EMIT_WARNNIGS OFF} UnitF, UnitG, {$WARN EMIT_WARNNIGS ON} UnitH.

Это воображаемая директива компилятора, которую я хотел бы иметь, или, может быть, она существует, и я не знаю об этом?

Спасибо за ваше время.

Ответы [ 3 ]

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

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

Итак, у вас есть несколько вариантов.

Нереалистичный вариант, который делает именно то, что вы просите:

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

Самый простой и реалистичный вариант:

Скомпилируйте модули один раз и используйте только DCU, удалив источник из пути к вашей библиотеке.Это проще всего, если вы не хотите их редактировать.

Вы все еще можете добавить их в свой путь просмотра , который отличается от пути к библиотеке .В этом случае используются DCU, но Delphi по-прежнему может находить источники, поэтому вы можете перемещаться по ним во время отладки.

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

Лучший вариант:

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

Другие решения:

  • Оставьте в стороне ваши желания не изменять модули и добавьтевсе равно директивы компилятора для этих модулей
  • Устранить предупреждения
2 голосов
/ 10 июля 2017

Я использую Delphi 7, и вот как я это делаю ...

Не включайте модуль в проект .dpr, иначе это не сработает, добавьте папку модуля в путь поиска параметров проекта.

Затем в каждом используемом модуле используйте следующие директивы компилятора:

  uses
    {$WARNINGS OFF}{$HINTS OFF}
    TheUnitHere;
    {$WARNINGS ON}{$HINTS ON}
2 голосов
/ 04 июля 2011

Нет, я не верю, что есть такая директива.

Единственный способ, который я нашел для достижения этой цели, - это

  • скомпилировать все
  • поместите dcu модуля, в котором произошла ошибка, где-то, где компилятор его найдет
  • убедитесь, что dcu найден ДО источника для этого dcu, или убедитесь, что источник не может быть найден компилятором

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

Это подход, который я часто использую с библиотечными модулями (которые мы всегда компилируем из исходного кода), когда я не хочу, чтобы отладчик входил в них. Я компилирую конфигурацию релиза (debug = off), затем выбираю dcu для блоков, в которые я не хочу вступать, и проверяю, что они найдены компилятором до их соответствующих файлов pas.

Одно предостережение: убедитесь, что, когда вам (нужно) поработать с оскорбительными единицами, dcu будет удалено, или вы будете в большом замешательстве. GExperts "Чистые каталоги" может помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...