Скомпилируйте код для сборки релиза в D - PullRequest
7 голосов
/ 07 июля 2010

Есть ли в D (D2) какой-либо механизм, заставляющий код компилироваться во время сборки выпуска?

В C у вас может быть что-то вроде

#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif

Я знаю, чтоD имеет

debug(mymodule) {
   //Do something
}

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

Я ищу глобальный механизм, который всегда будет запускать код в обычном режиме.построить, но скомпилировать его, когда вы передадите флаг -release.Я знаю, что некоторые встроенные функции имеют такую ​​возможность (например, assert), но есть ли способ для пользовательского кода сделать это тоже?

Ответы [ 3 ]

15 голосов
/ 07 июля 2010

Существует глобальное понятие отладки.Просто напишите:

debug {
    ... code ...
}
3 голосов
/ 07 июля 2010

dmd -release -version=dist module.d

и

version(dist) {} else {
    int i = 9;
}

Насколько я могу придумать.

[обновление]

ЛичноЯ думаю, что выше ответ "плохо".Вышеупомянутое решение вводило бы слишком сложную логику в процесс выпуска, который, я думаю, должен быть прямым и предсказуемым .Я бы порекомендовал просто использовать -debug и debug{ //... }.Даже если вы чувствуете, что можете забыть добавить флаг отладки во время компиляции - вы просто разрабатываете! - ошибки дешевы.Ошибки, которые попадают в релиз, ещё хуже.

1 голос
/ 07 июля 2010

Если лучшего ответа не найдено, такой взлом должен работать: bool debugMode() { bool res; assert(!!(res = true)); return res; }

...