Ich versuche, einen Compiler zu erstellen und verwende llvm (C ++ - API) für die Zwischen- und Endcodefertigung. Allerdings, wenn Sie versuchen, den Befehl auszuführen:
llvm.o: llvm.cpp llvm.h
$(CPP) llvm.cpp -c -$(FLAGS)
In meiner make-Datei erhalte ich den Fehler:
In file included from llvm.cpp:6:
./opt.h:5:10: fatal error: "llvm/IR/Constants.h" file not found
#include <llvm/IR/Constants.h>
^~~~~~~~~~~~~~~~~~~~~
1 error generated.
Ich benutze Mac OS (Sierra Version 10.12.6) und ich habe llvm mit brew installiert (brew install llvm
) so kann ich nicht verstehen, wie die Bibliotheksdatei nicht gefunden werden kann.
Auch mein Clang-Version:
bash-3.2$ clang --version
Apple LLVM version 9.0.0 (clang-900.0.37)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Ich habe viel gegoogelt, konnte aber nichts finden, was mein Problem löst, jede Hilfe wird geschätzt !!!.
Antworten:
2 für die Antwort № 1Was sind Ihre FLAGS? Sie müssen Linker- und Header-Suchflags angeben.
Folgendes könnte Ihnen helfen:
llvm.o: llvm.cpp llvm.h
$(CPP) llvm.cpp -c -$(FLAGS) `llvm-config --cxxflags --ldflags --libs`
Notiere dass der --libs
Ohne Parameter wird Ihre Binärdatei mit allen LLVM-Bibliotheken verknüpft.
UPD:
Auf MacOS werden llvm-config und andere Tools nicht hinzugefügt $PATH
, weil es den System-Compiler außer Kraft setzen würde und Ihr System irgendwie beschädigen kann. Sie müssen den vollständigen Pfad verwenden, z. /usr/local/Cellar/llvm/3.9.0/bin/llvm-config
. Stellen Sie sicher, dass Sie hier die richtige Version verwenden.
Stellen Sie außerdem sicher, dass Ihre FLAGS tatsächlich ausgewertet und nicht in den Befehl eingefügt werden:
FLAGS=$(shell llvm-config --cxxflags --ldflags --libs)