Откуда обычно берется-DNDEBUG?

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

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

спасибо.

Уильям

3 ответов


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


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


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