【问题标题】:How to build the latest clang-tidy?如何构建最新的clang-tidy?
【发布时间】:2018-04-25 14:46:30
【问题描述】:

我尝试从 sources 构建 clang-tidy,但它抱怨未定义的 CMake 命令:

CMake Error at clang-apply-replacements/CMakeLists.txt:5 (add_clang_library):
  Unknown CMake command "add_clang_library".


CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.9)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring incomplete, errors occurred!

如何构建 clang-tidy,或者如何在 macOS 上安装最新版本?

【问题讨论】:

  • 另请参阅 GitHib 上的 Noloader | build-llvm。它是一个用于下载和构建 LLVM 和组件的 shell 脚本。在撰写本文时,它构建了最新版本的 tarball,即 7.0.0。至少它会正确执行下载并配置目录结构,这样您就不会在上面浪费时间。 (LLVM 项目应该提供这样的脚本供所有开发人员使用)。

标签: c++ clang llvm clang-tidy


【解决方案1】:

编辑:这个答案已经过时了——LLVM 项目已移至https://github.com/llvm/llvm-project 的单个 git 存储库。请参阅下面的答案以获取更新的说明。


clang-tidy 旨在构建内部 llvm/clang 的检出,并依赖于 llvm 项目中的 CMake 宏。您应该查看 llvm 存储库,然后查看 llvm/tools/clang 中的 clang 存储库,然后查看 llvm/tools/clang/tools/extra 中的 clang-tools-extra 存储库。然后你可以在顶级目录上运行 CMake,make clang-tidy 应该可以工作了。

如果您对自己构建它不感兴趣,看起来 LLVM 的 Homebrew 公式还包括额外的工具:https://github.com/Homebrew/homebrew-core/blob/382d3defb5bc48ce2dccd17261be70c4ada9a124/Formula/llvm.rb#L181

【讨论】:

  • 所以我需要在 llvm/tools 中检查 clang,然后在 llvm/clang/tools/extra 中检查 clang-tools-extra?总共 3 个结帐 3 个存储库?
【解决方案2】:

@jtbandes:感谢您提供的信息。

我想为我们这些菜鸟分享这些明确的步骤:

1。从LLVM Download Page下载已发布的源代码

2。将其中的每一个解压缩到正确的目录中:

$ tar -zxvf <download_dir_path>/llvm-6.0.1.src.tar.xz
$ cd llvm-6.0.1.src/tools
$ tar -zxcf <download_dir_path>/cfe-6.0.1.src.tar.xz
$ cd llvm-6.0.1.src/tools/cfe-6.0.1.src/tools
$ tar -zxvf <download_dir_path>/clang-tools-extra-6.0.1.src.tar.xz

结果在目录llvm-6.0.1.src/tools/cfe-6.0.1.src/tools/clang-tools-extra-6.0.1.src/clang-tidy;这是不正确的。 lang-tools-extra-6.0.1.src 需要重命名为 extra(如 @jtbandes 所述)。

3。所以重命名它或提供一个符号链接:

$ cd llvm-6.0.1.src/tools/cfe-6.0.1.src/tools
$ mv clang-tools-extra-6.0.1.src extra
or
$ ln -s clang-tools-extra-6.0.1.src extra

路径 llvm-6.0.1.src/tools/cfe-6.0.1.src/tools/extra/clang-tidy 现在应该是有效的

4。构建它:

$ cd llvm-6.0.1.src
$ mkdir build
$ cd build
$ cmake ..
$ make 

一切都应该没有错误或警告。

5。构建输出:

构建输出可以在llvm-6.0.1.src/build/bin中找到。

【讨论】:

  • 很好解释...除了我确实收到了错误。 Transforms/IPO/PassManagerBuilder.cpp:835: undefined reference to 'llvm::createSLVPectorizerPass()' then collect2: error: ld returned 1 exit status
  • 你在什么平台下构建?
  • 您在 detar 命令中有一个类型。应该是 zxvf 而不是 zxcf。还有另一个错字写在lang-tools-extra-6.0.1.src 而不是clang-tools-extra-6.0.1.src
【解决方案3】:

最新步骤:

git clone https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_PROJECTS="clang-tools-extra" ../llvm
make install-clang-tidy

参考、忍者和其他详细信息:my own blog post.

【讨论】:

  • 今天试过了,但抱怨没有目标install-clang-tidy
  • @PerMildner 尝试 9cvele3 的解决方案,它在 llvm 10.0 上对我有用
  • @PerMildner make install clang-tidy,安装后不带分号
【解决方案4】:

我和 Per Mildner 有同样的问题。 Got 已通过 YvesgereY 发布的稍微修改的代码解决(我没有足够的声誉来对该答案发表评论,因此改为使用新答案)。

简而言之,我在 cmake 中添加了-G "Unix Makefiles"。如果没有此选项,将不会生成任何 makefile。另外,我使用了-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;"。仅指定 clang-tools-extra 时它不起作用。

这是整个sn-p:

git clone https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build 
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;" ../llvm
make -j8 install-clang-tidy

【讨论】:

  • 您应该知道 RelWithDebInfo 将导致 1.8GB 的​​大clang-tidy。最好只使用 Release。
  • 我需要在 OSX 上添加-DLLVM_ENABLE_LIBXML2=OFF
【解决方案5】:

对于所有正在寻找最新 (LLVM 11) Windows 构建说明的人(确保在 PATH 中安装并设置了 CMake、Visual Studio 2019 和 git):

git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git

cd llvm-project
mkdir build
cd build

cmake -G "Visual Studio 16 2019" -Thost=x64 -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm
cmake --build . --target clang-tidy --config RelWithDebInfo --parallel
cmake --build . --target clang-query --config RelWithDebInfo --parallel

【讨论】:

    【解决方案6】:

    这对我有用:

    mkdir build
    
    files="
    llvm-12.0.1.src.tar.xz
    clang-12.0.1.src.tar.xz
    clang-tools-extra-12.0.1.src.tar.xz
    "
    
    for f in $files; do
      echo "Untar $f"
      tar xf $f
    done
    
    mv llvm-12.0.1.src llvm
    mv clang-12.0.1.src llvm/tools/clang
    mv clang-tools-extra-12.0.1.src llvm/tools/clang/tools/extra
    
    cd build
    cmake -G "Unix Makefiles" \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_INSTALL_PREFIX=/usr/local/llvm \
      -DCLANG_BUILD_TOOLS=ON \
      ../llvm
    make -j16 install
    

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2019-08-05
      • 1970-01-01
      • 2021-05-18
      • 2016-08-04
      • 2016-02-18
      相关资源
      最近更新 更多