D'où vient normalement le-DNDEBUG?

notre système de compilation a quelque peu changé de sorte que les compilations optimisées ne sont plus intégrées à la ligne de compilation. J'ai cherché nos makefiles et je ne trouve pas ça.

donc la question Est, où est-DNDEBUG origine pour la plupart des gens et comment cela pourrait-il avoir changé? Avant nous avions-DNDEBUG et je ne pense pas que cela a été enlevé de l'un de nos makefiles.

Merci.

- William

20
demandé sur WilliamKF 2009-12-10 07:31:24

3 réponses

puisque le compilateur ne peut pas décider seul quand ajouter le NDEBUG define et quand ne pas le faire, le drapeau est toujours défini par le makefile ou le dossier de projet (selon votre système de construction).

15
répondu Tal Pressman 2009-12-10 04:39:19

il est vraiment difficile de répondre à cette question puisque vous n'avez pas spécifié le système de construction que vous utilisez. Si vous utilisez autoconf, alors soit l'utilisateur est censé mettre-DNDEBUG dans CPPFLAGS manuellement (ou peut-être que vous le configuriez à partir d'un fichier CONFIG_SITE qui a changé), soit le configure.ac peut configurer une variable personnalisée pour définir NDEBUG, ou configurer.ac peut invoquer AC_HEADER_ASSERT, auquel cas l'ajout de --disable-assert à l'invocation de configure définira NDEBUG dans config.h. Il y a beaucoup de façons, il peut arriver.

7
répondu William Pursell 2014-04-11 14:43:48

d'après mon expérience, -DNDEBUG a été passé manuellement, c'est-à-dire que les makefiles ont été écrits de telle manière que le drapeau est passé lors de la construction en mode release.

3
répondu Zach Hirsch 2009-12-10 04:33:39