-DNDEBUG通常来自哪里?

时间:2009-12-10 04:31:24

标签: c++ makefile ndebug

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

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

感谢。

- 威廉

3 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:8)

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

答案 2 :(得分:4)

根据我的经验,-DNDEBUG已经手动传递,即makefile文件的编写方式是在发布模式下构建时传递标记。