Eine Sache, die ich wirklich nicht verstehe, ist die Funktion von clang, wenn clang der Front-End-Teil des Compilers ist, sollte es einfach den Parser für den Quellcode arbeiten lassen, die verbleibende Arbeit wird von LLVM erledigt . Aber clang kann auch eine ausführbare Datei erzeugen. Also, wie versteht man das? Was ist die Beziehung zwischen clang und llvm?
Wenn Sie sehr spezifisch sind: Die ausführbare Datei clang ist ein Compiler-Treiber. Es ruft alle Teile auf, die benötigt werden, um eine ausführbare Datei zu erzeugen. Es ruft libclang auf, das die Front-End-Jobs ausführt: Parser / Lexer, die semantische Analyse, das Erstellen der AST- und Codegenerierung. Wenn der AST auf LLVM IR abgesenkt wird, werden die Front-End-Jobs ausgeführt, und der Optimierer und LLVM treten ein. Nach der Optimierung des Codes ruft der Compilertreiber das vom Ziel angegebene LLVM-Backend auf und schließlich den Linker, der die ausführbare Datei erstellt. Und deshalb kann der clang-Compiler-Treiber ausführbare Dateien erstellen.
LLVM ist ein Compiler-Backend, das vor dem clang geschrieben wurde und ursprünglich das Frontend von gcc in einem Tool namens 'llvm-gcc' verwendet hat. Clang ist der Name des Front-End-Codes, aber clang ist auch der Name eines Tools, das das clang-Frontend enthält, aber auch die gesamte Kompilierung für Sie ausführt. Spätere Phasen der Kompilierung sind entweder als Bibliotheken in das clang-Tool integriert, oder wenn sie separate ausführbare Dateien sind, weiß clang, wie sie aufgerufen werden. Mit den richtigen Befehlszeilenargumenten können Sie clang stoppen durch
Clang wird als Treiber für den gesamten Build fungieren, weil Programmierer das normalerweise wollen, die sourse analysiert, das Objekt erzeugt, die ausführbare Datei erstellt. Der abstrakte Syntaxbaum, der auf dich zurückgespuckt wird, ist ziemlich selten.
Offensichtlich ist dies die Quelle für alles LLVM Ссылка
Hier ist ein Video von Chriss Lattner, in dem erklärt wird, was LLVM Ссылка ist. Chandler Carruth hat einige Videos auf youtuble erklärt, Teile von Klängen, an denen er gearbeitet hat.
Es gibt 3 Bedeutungen von Clang:
Tags und Links llvm clang compiler-construction