[CMake] Debug build compiles and links, but Release build fails to link?

Arjen Markus arjen.markus at wldelft.nl
Thu Mar 15 03:02:36 EST 2007


Alan W. Irwin wrote:

> On 2007-03-14 19:50-0400 Jean-Sébastien Guay wrote:
>
>> I personally can't spot a major difference between the two (aside 
>> from -g replaced by -O3 and NDEBUG being defined, which shouldn't 
>> prevent it from linking).
>
>
> I ran into a similar problem recently.  I am no expert on NDEBUG, but 
> from a
> superficial google search it appears it generally removes the 
> debugging part
> of your code.  In my case I had an assert statement with executed a 
> needed
> function. NDEBUG turned that into a noop, the function call did not 
> occur,
> and all hell broke loose. To fix the problem, the code now always 
> calls the
> needed function, saves the return code, and only uses assert on a test of
> that saved return code.
>
> My conclusion from this experience is you have to be really careful about
> how the debugging part of your code is defined before NDEBUG works 
> properly.

Alan,

from your description I gather that your assert statement contained a 
side-effect.
You should never do that: assert is a macro that either expands to 
something like:

if ( ! (code) ) {fprintf(stderr, "This code failed") ; abort(); }

or (if NDEBUG is defined) to:

(nothing)

(Which is faster than running the check and ignoring the result)

So, if there is a side effect that your program relies on, that 
particular code is
not run and the side effect never takes place.

Regards,

Arjen


More information about the CMake mailing list