-DNDEBUG 通常来自哪里?

发布于 2024-08-14 18:54:06 字数 271 浏览 4 评论 0原文

我们的构建系统发生了某种变化,优化后的构建不再获得 -DNDEBUG 添加到编译行。我搜索了我们的 makefile,但没有找到这个。

对于大多数人来说,-DNDEBUG 起源于哪里?这可能会发生什么变化?在我们有 -DNDEBUG 之前,我认为它没有从我们的任何 makefile 中删除。

Our build system has somehow changed such that optimized builds are no longer getting the -DNDEBUG added to the compile line. I searched our makefiles and didn't find this.

Where does -DNDEBUG originate for most people and how might that have changed? Before we did have -DNDEBUG, and I don't think this was removed from any of our makefiles.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

与往事干杯 2024-08-21 18:54:06

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

Since the compiler can't decide on its own when to add the NDEBUG define and when not to, the flag is always set by either the makefile or project file (depending on your build system).

懵少女 2024-08-21 18:54:06

回答这个问题确实很困难,因为您没有指定您正在使用的构建系统。如果您使用 Autoconf,那么用户需要输入 -DNDEBUG手动在 CPPFLAGS 中(或者您可能是从已更改的 CONFIG_SITE 文件中设置它),或者 configure.ac 文件可能会设置一个自定义变量来设置 NDEBUG,或者 configure.ac< /em> 可能会调用 AC_HEADER_ASSERT,在这种情况下,将 --disable-assert 添加到 configure将在config.h中定义NDEBUG。发生这种情况的方式有很多种。

It is really difficult to answer this since you didn't specify the build system you are using. If you're using Autoconf, then either the user is expected to put -DNDEBUG in CPPFLAGS manually (or perhaps you were setting it from a CONFIG_SITE file that has changed), or the configure.ac file might set up a custom variable for setting NDEBUG, or configure.ac may invoke AC_HEADER_ASSERT, in which case adding --disable-assert to the invocation of configure will define NDEBUG in config.h. There are lots of ways it can happen.

灯下孤影 2024-08-21 18:54:06

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

In my experience, -DNDEBUG has been passed manually, i.e. the makefiles have been written in such a way that the flag is passed when building in release mode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文