Welcher vordefinierte Makro kann verwendet werden, um Debug-Build mit Clang zu erkennen?

7

MSVC definiert _DEBUG im Debug-Modus, gcc definiert NDEBUG im Release-Modus. Mit welchem ​​Makro kann ich im Clang feststellen, ob der Code für die Veröffentlichung oder das Debuggen kompiliert wird?

    
Violet Giraffe 28.10.2013, 13:06
quelle

4 Antworten

8

Wenn Sie sich die Projekteinstellungen Ihrer IDE ansehen, werden Sie sehen, dass diese Makros tatsächlich dort manuell definiert sind, sie werden nicht automatisch vom Compiler definiert. In der Tat gibt es keine Möglichkeit für den Compiler, tatsächlich zu wissen, ob es ein "Debug" oder "Release" erstellt, es baut nur abhängig von den Flags, die ihm vom Benutzer (oder IDE) zur Verfügung gestellt werden.

Sie müssen Ihre eigenen Makros erstellen und sie manuell definieren, genau wie es die IDE beim Erstellen der Projekte tut.

    
Some programmer dude 28.10.2013, 13:10
quelle
6

Compiler definieren diese Makros nicht. Deine IDE / Makefile / <insert build system here> tut es. Dies hängt nicht vom Compiler ab, sondern vom verwendeten Umgebung / Build-Hilfsprogramm.

Die Konvention definiert das Makro DEBUG im Debug-Modus und das Makro NDEBUG im Freigabe-Modus.

    
user529758 28.10.2013 13:11
quelle
2

In einem Befehlszeilencompiler gibt es keinen Debugmodus . Das ist eine IDE-Sache: Es richtet nur einige Optionen ein, die an den Compiler gesendet werden sollen.

Wenn Sie clang von der Befehlszeile aus verwenden, können Sie verwenden, was Sie wollen. Dasselbe gilt für gcc . Wenn Sie also mit gcc NDEBUG verwenden, können Sie genau das gleiche verwenden.

    
rodrigo 28.10.2013 13:11
quelle
2

Sie können das Flag __OPTIMIZE__ verwenden, um festzustellen, ob eine Optimierung stattfindet. Das bedeutet im Allgemeinen, dass es kein Debug-Build ist, da Optimierungen oft die Code-Sequenz neu anordnen. Der Versuch, den optimierten Code zu durchlaufen, kann verwirrend sein.

Das ist wahrscheinlich das, was diejenigen, die am meisten an dieser Frage interessiert sind, wirklich versuchen herauszufinden.

    
rm1948 18.07.2016 02:39
quelle

Tags und Links