如何构建最新的 clang-tidy?

How to build the latest clang-tidy?

我尝试从 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 上安装最新版本?

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


clang-tidy 旨在构建 inside 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

@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。所以重命名它或提供一个符号 link:

$ 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 中找到构建输出。

最新步骤:

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;clang-tools-extra" ../llvm
make install clang-tidy

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

我和 Per Mildner 有同样的问题。 Got 通过稍微修改的代码 YvesgereY posted 得到解决(我没有足够的声誉 post 对该答案发表评论,因此改为一个新答案)。

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

这是整个片段:

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

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

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

这对我有用:

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

从 LLVM 14.0.0 开始,稀疏签出不再有效(至少暂时如此)并且 top-level 目录不包含 CMakeLists.txt。我相信树布局在 LLVM 13.0.1 之后发生了变化。因此,none 此处的方法无需经过相当多的修改即可工作。

以下是构建版本 15.0.0git(撰写本文时最新版本)的方法。参见相关问题:https://github.com/llvm/llvm-project/issues/53281.

首先,使用git获取压缩代码或克隆(较慢)

$ wget "https://github.com/llvm/llvm-project/archive/refs/heads/main.zip" -O llvm.zip
$ unzip llvm.zip

像往常一样,在 llvm 目录中创建一个构建目录和 运行 cmake。

$ mkdir /build
$ cd /build
$ cmake -G "Unix Makefiles" \
      -DCMAKE_INSTALL_PREFIX=/usr/local/llvm \
      -DCMAKE_BUILD_TYPE=Release \
      -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \
      /llvm-project-main/llvm

在生成的文件中向下导航,只构建 clang-tidy.

$ cd /build/tools/clang/tools/extra/clang-tidy
$ make install

Cmake 将安装到 /usr/local/llvm。此外,如果您想查看特定版本,请在第一步中使用标签,如下所示:

$ wget "https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-14.0.0.zip"

请注意,您需要为 运行ning clang-tidy 提供匹配的内置 headers,它们位于 GitHub 在 llvm-project/clang/lib/Headers 下,可以用 -extra-arg=-I/path/to/builtin/headers.

指向