27

我试图从源代码构建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 上安装最新版本?

4

6 回答 6

20

最新步骤:

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

参考、忍者和其他细节:我自己的博客文章。

于 2019-09-05T19:17:13.207 回答
16

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


clang-tidy 旨在构建llvm/clang 的签出中,并依赖于 llvm 项目中的 CMake 宏。您应该查看 llvm repo,然后是 clang repo inside llvm/tools/clang然后是 clang-tools-extra repo inside llvm/tools/clang/tools/extra。然后您可以在顶级目录上运行 CMake,并且make clang-tidy应该可以工作。

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

于 2017-11-13T00:34:28.460 回答
15

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

总之,我添加-G "Unix Makefiles"到cmake。如果没有此选项,将不会生成任何 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
于 2020-02-13T12:12:41.393 回答
13

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

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

1.从LLVM下载页面下载已发布的源码

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.

于 2018-04-06T23:17:23.860 回答
2

对于正在寻找最新 (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
于 2021-02-08T15:26:12.447 回答
0

这对我有用:

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
于 2021-09-24T06:16:55.070 回答