如何构建clang / examples / PrintFunctionNames?

时间:2011-06-07 13:07:03

标签: build clang

我需要一些简单的例子来开始使用clang。 我下载了llvm和clang并构建了:

mkdir llvm-build
cd llvm-build
../llvm/configure
make

我尝试从clang示例构建PrintFunctionNames但收到错误消息:

../../../../ Makefile.common:61:../../../../ Makefile.config:没有这样的文件或目录 ../../../../Makefile.common:69:/Makefile.rules:没有这样的文件或目录 make: * 没有规则来制作目标`/Makefile.rules'。停止。

自述文件说只需要make。 那么如何构建这个插件呢?

4 个答案:

答案 0 :(得分:9)

进入llvm-build / tools / clang,然后运行“make BUILD_EXAMPLES = 1”。

答案 1 :(得分:2)

最确定的是,您将获得LLVM中继线检查,并在工具路径下检查Clang中继线[通过http://clang.llvm.org/get_started.html建立Clang解释。

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递归

然后在我的Pentium D 945系统的命令上应用make -j(n + 1个内核):

使[构建 autotools 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',但如果在命令行上没有显式包含BUILD_EXAMPLES ='1',则在运行make时将忽略该标志。

在LLVM树的顶部,您构建了反对运行make BUILD_EXAMPLES ='1'将构建LLVM特定示例,然后进入build / tools / clang路径然后必须运行make BUILD_EXAMPLES ='1'再次构建Clang的例子。

因此:

LLVM Top:

对于LLVM示例,

使BUILD_EXAMPLES ='1'//  cd tools / clang  为了Clang特定的例子,使BUILD_EXAMPLES ='1'//

验证在/ usr / local / bin下安装LLVM和/ usr / local / lib / for Clang的示例。

如果您使用CMAKE,二进制示例的默认位置位于/ usr / local / examples

答案 2 :(得分:1)

我按照http://clang.llvm.org/get_started.html的说明操作,但有两个例外:

  1. 我的构建目录位于源目录(即cd llvm; mkdir build)中,但我认为它并不相关。
  2. 我发布了cmake:

    cd build

    cmake -DLLVM_BUILD_EXAMPLES = 1 -DCLANG_BUILD_EXAMPLES = 1 ..

  3. 之后(并编译当然(make -j8))我可以在build dir中找到这些例子:

    find -iname '*printfunctionname*'
    ./lib/PrintFunctionNames.so
    ...
    

答案 3 :(得分:0)

昨天我尝试做类似的事情:get a list of methods in a class using clang并成功了。也许我的帖子也有帮助。我最好的帮助是AST Matchers tutorial