我们的构建系统发生了某种变化,以至于优化的构建不再将 -DNDEBUG 添加到编译行。我搜索了我们的 makefile 并没有找到这个。
所以问题是,对于大多数人来说,-DNDEBUG 起源于哪里,它又会如何改变?在我们确实有 -DNDEBUG 之前,我认为它没有从我们的任何 makefile 中删除。
谢谢。
-威廉
由于编译器无法自行决定何时添加 NDEBUG 定义以及何时不添加,因此该标志始终由 makefile 或项目文件设置(取决于您的构建系统)。
由于您没有指定您正在使用的构建系统,因此很难回答这个问题。如果您使用的是 autoconf,那么用户应该手动将 -DNDEBUG 放入 CPPFLAGS 中(或者您可能是从已更改的 CONFIG_SITE 文件中设置它),或者 configure.ac 可能会设置一个自定义变量来设置 NDEBUG ,或者 configure.ac 可以调用 AC_HEADER_ASSERT,在这种情况下,将 --disable-assert 添加到 configure 的调用中将在 config.h 中定义 NDEBUG。有很多方法可以发生。
根据我的经验,-DNDEBUG 是手动传递的,即生成文件的编写方式是在发布模式下构建时传递标志。