关于macos:clang-tidy无法找到stdlib标头

clang-tidy can't locate stdlib headers

今天,我已经从源代码构建了clang-tidy,我已经使用clang构建了它。构建完成后,我创建了指向可执行文件的符号链接,如下所示:

1
ln -s /path/to/build/bin/clang-tidy /usr/local/bin/clang-tidy

然后,我尝试在简单项目(包含打印helloworld代码的单个.cpp文件)中将clang-tidy与cmake一起使用。这是我的cmake文件的样子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
project(Test)
cmake_minimum_required(VERSION 3.12.0 FATAL_ERROR)

set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_CXX_STANDARD 17)
set(CXX_STANDARD_REQUIRED)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_CLANG_TIDY
  clang-tidy;
  -checks=*;)

add_executable(Test
    helloworld.cpp)

我在某处读到,带有cmake的clang-tidy仅适用于Unix Makefile。


If I understand the issue is that clang-tidy doesn't know the location of headers of libc++ while clang does, am I right?

我碰巧碰到了同样的问题。起初真的不很清楚,为什么clang-tidy调用的编译未检测到已安装的libc。

事实证明,如果compile_commands.json包含指向clang的符号链接,则它将找不到libc。它相对于"安装目录"进行搜索,该目录为clang二进制位置,但不遵循符号链接。而且找不到它。

在此处报告:https://bugs.llvm.org/show_bug.cgi?id = 47460

作为一种解决方法,您可以将编译器的完整路径传递给CMake,这样生成的compile_commands.json将与clang-tidy"兼容"。该路径必须来自实际的安装目录,请注意clang仍然是clang的符号链接,并且很重要,但是请确保该目录正确。

至少这是我在Ubuntu机器上的问题。您的看起来非常相似,因此可能是相同的问题。尽管我不知道XCode如何管理工具链,所以可能完全是其他问题:)