views:

736

answers:

3

Hi,

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 don't find this.

So the question is, 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.

Thanks.

-William

+3  A: 

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.

Zach Hirsch
+7  A: 

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).

Tal Pressman
+3  A: 

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 CFLAGS manually (or perhaps you were setting it from a CONFIG_SITE file that has changed), or the configure.ac 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.

William Pursell