我需要一些简单的例子来开始使用clang。
我下载了llvm和clang并构建了:
mkdir llvm-build
cd llvm-build
../llvm/configure
make
我试图从clang示例构建PrintFunctionNames,但收到一条错误消息:
../../../../Makefile.common:61:../../../../Makefile.config:没有这样的文件或目录
../../../../Makefile.common:69:/Makefile.rules:没有这样的文件或目录
使: * 没有规则来制作目标`/Makefile.rules'。停止。
自述文件说只需要make。
那么如何构建这个插件呢?
进入llvm-build / tools / clang,运行“make BUILD_EXAMPLES = 1”。
进入llvm-build / tools / clang,运行“make BUILD_EXAMPLES = 1”。
最确定的是,您将获得LLVM中继线检查,并在工具路径下检查Clang中继线[在建筑物Clang via下解释 http://clang.llvm.org/get_started.html。
Makefile构建指南: http://llvm.org/docs/MakefileGuide.html
在OS X上,构建设置有点不同,但在Debian Linux上,我每天都在构建它,如下所示:
../trunk/configure --enable-target = x86_64,arm,cpp,cbe --with-built-clang --enable-pic --enable-polly --enable-shared --with-cxx-include-arch = x86_64 --enable-optimized --with-optimize-option = -Os --enable-assertions --disable-bootstrap --disable-multilib --enable-jit --enable-threads --no-create --no -recursion
然后在我的Pentium D 945系统的命令上应用make -j(n + 1个内核):
使[反对 自动工具 make -j(n + 1)并不总是干净地构建llvm cmake的。因此,如果要运行所有核心,可以预期多次运行make -j(n + 1)以获得干净的构建。
无需访问多个核心的标准表单:
make BUILD_EXAMPLES ='1'//阅读下面的注释
总是导致干净的构建,如果它没有向LLVM报告错误。
注意:如果您处于顶层,则可以按如下方式更新llvm trunk,project-test trunk和clang trunk:
做树干
然后再次运行make,因为提前配置了BUILD_EXAMPLES = 1。
make BUILD_EXAMPLES ='1'
注意:Autotools将允许一个配置BUILD_EXAMPLES ='1',但如果在命令行上make后没有明确包含BUILD_EXAMPLES ='1',则在运行make时将忽略该标志。
在LLVM树的顶部,你构建了反对运行make BUILD_EXAMPLES ='1'将构建LLVM特定的示例,然后进入build / tools / clang路径,然后必须再次运行make BUILD_EXAMPLES ='1'来构建Clang示例。
因此:
LLVM热门:
对于LLVM示例,请使用BUILD_EXAMPLES ='1'//
cd tools / clang
对于Clang特定示例,请使用BUILD_EXAMPLES ='1'//
验证在/ usr / local / bin下安装LLVM和/ usr / local / lib / for Clang的示例。
如果使用CMAKE,则二进制示例的默认位置位于/ usr / local / examples下
我按照说明进行操作 http://clang.llvm.org/get_started.html 有两个例外:
- 我的构建目录在源目录(即cd llvm; mkdir build)中,但我不认为它是相关的。
我发布了cmake:
cd build
cmake -DLLVM_BUILD_EXAMPLES = 1 -DCLANG_BUILD_EXAMPLES = 1 ..
在那之后(并编译当然(make -j8))我可以在build dir中找到这些例子:
find -iname '*printfunctionname*'
./lib/PrintFunctionNames.so
...
我昨天试着做类似的事: 使用clang获取类中的方法列表 并成功了。也许我的帖子在这里也有帮助。我最好的帮助就是这个 AST Matchers教程。