Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与CMake和嵌入式目标的叮当声 这里的目标是帮助人们在用C++开发时在嵌入式系统上捕获一些错误。作为这项工作的一部分,我正试图让clang tidy为小型嵌入式目标工作_C++_Cmake_Embedded_Clang Tidy - Fatal编程技术网

与CMake和嵌入式目标的叮当声 这里的目标是帮助人们在用C++开发时在嵌入式系统上捕获一些错误。作为这项工作的一部分,我正试图让clang tidy为小型嵌入式目标工作

与CMake和嵌入式目标的叮当声 这里的目标是帮助人们在用C++开发时在嵌入式系统上捕获一些错误。作为这项工作的一部分,我正试图让clang tidy为小型嵌入式目标工作,c++,cmake,embedded,clang-tidy,C++,Cmake,Embedded,Clang Tidy,我正在尝试执行以下操作: 在建筑上运行叮当声;然后 使用GCC 8.2编译 但是,clang tidy因“未知目标CPU’armv6-m”而失败 -- 我使用的CMake脚本如下所示: ClangTidy.cmake set(ENABLE_CLANG_TIDY ON CACHE BOOL "Add clang-tidy automatically to builds") if (ENABLE_CLANG_TIDY) find_program(CLANG_TIDY_EXE NAMES "C

我正在尝试执行以下操作:

  • 在建筑上运行叮当声;然后
  • 使用GCC 8.2编译
  • 但是,clang tidy因“未知目标CPU’armv6-m”而失败

    --

    我使用的CMake脚本如下所示:

    ClangTidy.cmake

    set(ENABLE_CLANG_TIDY ON CACHE BOOL "Add clang-tidy automatically to builds")
    if (ENABLE_CLANG_TIDY)
        find_program(CLANG_TIDY_EXE NAMES "C:\\Program Files\\LLVM\\bin\\clang-tidy.exe")
        if (CLANG_TIDY_EXE)
            message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
            set(CLANG_TIDY_CHECKS "-*,modernize-*")
            set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*'"
            CACHE STRING "" FORCE)
        else()
            message(AUTHOR_WARNING "clang-tidy not found!")
            set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
        endif()
    endif()
    
    armv6-m是CMake脚本的一部分,但它仅用于GCC,以下用于设置GCC标志:

    set(TARGET STM32F070x6)
    set(ARCH armv6-m)
    set(CORE cortex-m0)
    set(CMAKE_CXX_FLAGS "-march=${ARCH} -mcpu=${CORE} -D${TARGET}")
    
    然后构建以下内容:

    #
    # Including extra cmake rules
    include(cmake/ClangTidy.cmake)
    
    #Compile and link the exe :)
    add_executable(${TARGET}.elf ${MAIN_SOURCE})
    
    #Print the size of the .hex
    add_custom_target(size ALL arm-none-eabi-size ${TARGET}.elf DEPENDS ${TARGET}.elf)
    add_custom_target(${TARGET}.bin ALL DEPENDS ${TARGET}.elf COMMAND ${CMAKE_OBJCOPY} -Obinary ${TARGET}.elf ${TARGET}.bin)
    
    cmake生成的生成消息为:

    [build] "C:\Program Files\CMake\bin\cmake.exe" -E __run_co_compile 
    --tidy="C:/Program Files/LLVM/bin/clang-tidy.exe;-checks=-*,modernize-*;-header-filter='G:/Files/Git/projectname/*'" --source=../src/main.cpp 
    -- C:\PROGRA~2\GNUTOO~1\82018-~1\bin\AR10B2~1.EXE  -DHSE_VALUE=48000000 -DSTM32F070x6 -DTRACE -DUSE_STDPERIPH_DRIVER -I../include -I../system -I../library -I../library/usb -I../library/usb/HID -I../library/usb/LL -I../library/usb/Standard -I../library/usb/Types -I../library/common -I../library/common/SCPI -I../library/common/containers -I../library/peripherals -I../library/peripherals/Bitbanging -I../st-library/include -I../st-library/include/arm -I../st-library/include/cmsis -I../st-library/include/cortexm -I../st-library/include/diag -I../st-library/include/stm32f0-stdperiph -march=armv6-m -mcpu=cortex-m0 -DSTM32F070x6 -Os -mthumb -g2 -ggdb -pedantic -Wall -Wextra -Wfloat-equal -Wshadow -Wall -Wl,--gc-sections -fmessage-length=0 -ffunction-sections -fdata-sections -ffreestanding -fno-builtin -std=c++1z -fno-rtti -fno-exceptions -fno-use-cxa-atexit -fno-threadsafe-statics -ftemplate-backtrace-limit=0 -O2 -g -DNDEBUG -MD -MT CMakeFiles/STM32F070x6.elf.dir/src/main.cpp.obj -MF CMakeFiles\STM32F070x6.elf.dir\src\main.cpp.obj.d -o CMakeFiles/STM32F070x6.elf.dir/src/main.cpp.obj -c ../src/main.cpp
    
    发生上述错误后,立即发生错误:

    [build] error: unknown target CPU 'armv6-m' [clang-diagnostic-error]
    [build] note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cannonlake, icelake-client, icelake-server, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, x86-64
    

    目标(armv6-m)字段似乎与GCC使用的字段相同。但我不确定为什么要用target字段调用clang tidy。

    在源代码中,我们可以看到:

    static int-handleidy(const-std::string和runCmd,const-std::string和sourceFile,
    常量标准::向量和原始值(cmd)
    {
    //通过获取给定的内容来构建铿锵整洁的命令行
    //并添加我们的编译器命令行
    //自动跳过编译器本身并提取
    //选项。
    int ret;
    std::vector tidy_cmd=cmExpandedList(runCmd,true);
    tidy_cmd.push_back(源文件);
    整齐放置在后面(“--”);
    cmAppend(整洁命令、原始命令);
    
    src:


    所以我想说,所有的编译器选项,例如CMAKE_CXX_标志,默认情况下也会传递给clang tidy…

    很好的定位。它确实解释了什么是错误的,但现在如何使它工作(不需要重新编译CMAKE进行更改)。问题是,我如何防止它。似乎没有任何不这样做的选项。