Подтвердить что ты не робот

Откуда обычно приходит -DNDEBUG?

Наша система сборки каким-то образом изменилась так, что оптимизированные сборки больше не добавили -DNDEBUG в строку компиляции. Я искал наши make файлы и не нашел этого.

Итак, вопрос в том, где -DNDEBUG возникает для большинства людей и как это могло измениться? Раньше у нас было -DNDEBUG, и я не думаю, что это было удалено из любого из наших make файлов.

Спасибо.

-William

4b9b3361

Ответ 1

Поскольку компилятор не может самостоятельно решить, когда нужно добавить определение NDEBUG, а когда это не так, флаг всегда задается либо файлом makefile, либо файлом проекта (в зависимости от вашей системы сборки).

Ответ 2

На самом деле это сложно ответить, поскольку вы не указали используемую систему сборки. Если вы используете autoconf, то либо пользователь должен поместить -DNDEBUG в CPPFLAGS вручную (или, возможно, вы установили его из файла CONFIG_SITE, который был изменен), либо configure.ac может настроить пользовательскую переменную для установки NDEBUG, или configure.ac может вызывать AC_HEADER_ASSERT, и в этом случае добавление -disable-assert к вызову configure определит NDEBUG в config.h. Есть много способов, которыми это может случиться.

Ответ 3

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