如何为clang-tidy指定编译数据库

问题描述

我在为自己的项目运行clang-tidy时遇到困难。我正在尝试为我的项目运行clang-tidy,以将数据发送到codacy。我正在这样做:

clang-tidy $PWD -header-filter=.*,-checks=-*,clang-analyzer-*,-clang-analyzer-cplusplus* | ./codacy-clang-tidy-1.1.1 | \
        curl -XPOST -L -H "project-token: $codacy_PROJECT_TOKEN" \
            -H "Content-type: application/json" -d @- \
            "https://api.codacy.com/2.0/commit/$TraviS_COMMIT/issuesRemoteResults"

        curl -XPOST -L -H "project-token: $codacy_PROJECT_TOKEN" \
            -H "Content-type: application/json" \
            "https://api.codacy.com/2.0/commit/$TraviS_COMMIT/resultsFinal"

但是它抱怨找不到编译数据:

Error while trying to load a compilation database:
Could not auto-detect compilation database for file "/home/travis/build/mVento3/Duckvil/build"
No compilation database found in /home/travis/build/mVento3/Duckvil or any parent directory
fixed-compilation-database: Error while opening fixed database: No such file or directory
json-compilation-database: Error while opening JSON database: No such file or directory

我确定 compile_commands.json 在我要运行clang-tidy的 build 目录中。
主要的CMakeLists.txt:

cmake_minimum_required(VERSION 3.17)

project(Duckvil)

find_program(CLANG_TIDY_COMMAND NAMES clang-tidy)

if(NOT CLANG_TIDY_COMMAND)
    message(WARNING "Could not find clang-tidy!")
    set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE)
else()
    message(WARNING "Found clang-tidy")
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    set(CMAKE_CXX_CLANG_TIDY
        clang-tidy;
        -header-filter=.*;
        -checks=*;
        --dump-config > .clang-tidy;
    )
endif()

if(WIN32)
    add_deFinitions(-DDUCKVIL_PLATFORM_WINDOWS)
else()
    if(UNIX)
        add_deFinitions(-DDUCKVIL_PLATFORM_LINUX)

        SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
        SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov")

        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
        SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
    endif()
endif()

add_deFinitions(-DDUCKVIL_OUTPUT="${CMAKE_SOURCE_DIR}/bin")

add_subdirectory(source)
list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
ENABLE_TESTING()
add_subdirectory(test)

我需要指定一些其他选项,还是我误解了某些内容

编辑

再次考虑,也许我不应该在单独的“执行”中执行此操作,而是在生成CMake项目时?

EDIT2

我想到了这个

./codacy-clang-tidy-1.1.1 < compile_commands.json | \
        curl -XPOST -L -H "project-token: ${codacy_PROJECT_TOKEN}" \
            -H "Content-type: application/json" -d @- \
            "https://api.codacy.com/2.0/commit/${TraviS_COMMIT}/issuesRemoteResults"

        curl -XPOST -L -H "project-token: ${codacy_PROJECT_TOKEN}" \
            -H "Content-type: application/json" \
            "https://api.codacy.com/2.0/commit/${TraviS_COMMIT}/resultsFinal"

现在它不是在抱怨数据库,似乎是在将数据发送到codacy,但是我看不到任何有关codacy的信息... 我通读了codacy-clang-tidy,看来它正在从标准输入中获取数据。

解决方法

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

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

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