-DNDEBUG通常来自哪里?

Wil*_*mKF 21 c++ makefile ndebug

我们的构建系统已经以某种方式发生了变化,使得优化的构建不再将-DNDEBUG添加到编译行.我搜索了我们的makefile,却找不到这个.

所以问题是,-DNDEBUG在哪里发源于大多数人以及这可能会如何改变?在我们确实有-DNDEBUG之前,我不认为这是从我们的任何makefile中删除的.

谢谢.

-威廉

Tal*_*man 17

由于编译器无法自行决定何时添加NDEBUG定义以及何时不添加,因此该标志始终由makefile或项目文件设置(取决于您的构建系统).


Wil*_*ell 8

由于您没有指定正在使用的构建系统,因此很难回答这个问题.如果您正在使用autoconf,那么要么用户手动将-DNDEBUG放在CPPFLAGS中(或者您可能是从已更改的CONFIG_SITE文件中设置它),或者configure.ac可能会设置自定义变量以设置NDEBUG或者configure.ac可以调用AC_HEADER_ASSERT,在这种情况下,在configure的调用中添加--disable-assert将在config.h中定义NDEBUG.有很多方法可以实现.


Zac*_*sch 5

根据我的经验,-DNDEBUG 是手动传递的,即生成文件的编写方式使得在发布模式下构建时传递标志。