clang-tidy找不到目标的公共标头

问题描述

我在Windows上有一个cmake项目,该项目使用JOM作为生成器,使用MSVC 19作为编译器。现在,我正在尝试向该项目中的某些目标添加clang-tidy检查。这是启用clang-tidy的代码的一部分:

    if ( CLANG_TIDY_EXE )
        set( _clang_tidy_checkable_headers_abs_path_list ${_tgt_cmn_ct_PUBLIC_INCLUDE_ABS_PATH_LIST} )
        list( APPEND _clang_tidy_checkable_headers_abs_path_list ${_tgt_cmn_ct_PRIVATE_INCLUDE_ABS_PATH_LIST} )
        #Don't check autogenerated headers
        list( FILTER _clang_tidy_checkable_headers_abs_path_list EXCLUDE REGEX "generated/.+" )

        #Clang-tidy is looking for just the header names!
        foreach ( path IN ITEMS ${_clang_tidy_checkable_headers_abs_path_list} )
            get_filename_component( FILE_NAME ${path} NAME )
            list( APPEND HEADERS ${FILE_NAME} )
        endforeach ()

        #Create a regex containing headers name
        set( HEADER_FILTER_REGEX "" )
        string( JOIN "|" HEADER_FILTER_REGEX ${HEADERS} )
        string( REPLACE "."
            "\\." HEADER_FILTER_REGEX
            ${HEADER_FILTER_REGEX} )

        string( PREPEND HEADER_FILTER_REGEX "(" )
        string( APPEND HEADER_FILTER_REGEX ")" )

        #--extra-arg=/EHsc is to get rid of the `clang-diagnostic-error` warning on Windows regarding disabled exceptions!
        set_target_properties(
            ${IN_TARGET_NAME} PROPERTIES
            CXX_CLANG_TIDY "${DO_CLANG_TIDY};--header-filter=${HEADER_FILTER_REGEX};-p=${CMAKE_BINARY_DIR}/compile_commands.json;--extra-arg=/EHsc"
        )

在上面的代码中,我基本上从私有和公共标头中创建了一个正则表达式,我将通过clang-tidy检查该正则表达式并将其传递给--header-filter参数。您还可以看到,我也提供了compile_commands.json文件的路径。但是一旦建立启用了clang_tidy的目标,就会出现以下错误

error: 'project_x/common/loggerWrapper/loggerWrapper.hpp' file not found [clang-diagnostic-error]

请注意,这个loggerWrapper.hpp实际上是我在正则表达式中列出的文件之一。 这里有趣的一点是,以上解决方案与Ninja完美搭配,但与JOM完美搭配。

任何想法可能是什么问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)