我正在尝试编写一个编译器,并且我正在使用 llvm(C ++ api)进行中间和最终代码生成。虽然在尝试执行命令时:
llvm.o: llvm.cpp llvm.h
$(CPP) llvm.cpp -c -$(FLAGS)
在我的make文件中我收到错误:
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.
我正在使用 Mac Os(Sierra版本10.12.6),并且我已经使用brew(brew install llvm
)安装了llvm,所以我无法理解如何找到库文件。
我的 clang版本:
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
我已经搜索了很多内容,但无法找到解决我问题的任何内容,任何帮助都值得赞赏!!!。
答案 0 :(得分:2)
你的旗帜是什么?您需要提供链接器标志和标头搜索标志。
以下内容可以为您提供帮助:
llvm.o: llvm.cpp llvm.h
$(CPP) llvm.cpp -c -$(FLAGS) `llvm-config --cxxflags --ldflags --libs`
请注意,没有任何参数的--libs
会将您的二进制文件与所有LLVM库链接起来。
<强> UPD:强>
在MacOS上,llvm-config和其他工具没有添加到$PATH
,因为它会覆盖系统编译器并且可能以某种方式阻塞你的系统。您需要使用完整路径,例如/usr/local/Cellar/llvm/3.9.0/bin/llvm-config
。确保在这里使用正确的版本。
另外,请确保您的FLAGS实际已经过评估,而不是按原样粘贴到命令:
FLAGS=$(shell llvm-config --cxxflags --ldflags --libs)