clang-tidy не может найти заголовки stdlib - PullRequest
2 голосов
/ 19 октября 2019

Сегодня я собрал clang-tidy из источников, я построил его с использованием clang ++. После того, как он был построен, я создал символическую ссылку на исполняемый файл следующим образом:

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

Затем я попытался использовать clang-tidy с cmake в простом проекте (один файл .cpp, содержащий печать кода helloworld). Вот так выглядит мой файл cmake:

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)

Я где-то читал, что clang-tidy с cmake работает только с генераторами Unix Makefiles и Ninja (или, возможно, некоторыми другими). Я обычно использую генератор xcode, но я мало знаком с этими двумя, так что мне было наплевать на других. Я пытался сгенерировать и собрать проект как с Unix Makefiles, так и с Ninja, но с обоими я получаю эту ошибку:

/Users/xxxxxxx/Dev/VSCodePlayground/helloworld.cpp:2:10: error: 'string' file not found [clang-diagnostic-error]

Я нашел некоторую информацию, что это, вероятно, вызвано тем, что clang не может найти libc ++/ stdlib заголовки. Поэтому я попытался предложить компиляцию с аргументом -v (которая прошла успешно без ошибок) и включил этот вывод в список include dirs:

#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)

Если я понимаю, проблема в том, что clang-tidy не знаетрасположение заголовков libc ++, в то время как clang делает, я прав? Но как мне решить эту проблему и чем вызвана эта проблема?

...