在 Linux 上使用 CMake 时如何告诉 PVS-Studio 忽略第三方库中的所有文件
How can I tell PVS-Studio to ignore all of the files in a third party library when using CMake on Linux
我在 Linux 上使用带有 CMake 的 PVS-Studio。我最近在我的项目中添加了一个第三方库。
PVS-Studio 正在标记第三方库的头文件中可能存在的问题。在分析我的代码时,如何让 PVS-Studio 忽略整个第三方库?当在 Windows 上使用带有 Visual Studio 的 PVS-Studio 时,我能够使用 Visual Studio 中的 PVS-Studio 扩展来做到这一点。 Linux 我没有。
我已将我的 CMakeLists.txt 文件附加到该项目(非常简单)以及 PVS-Studio 发出的警告列表。
CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
project(my_project)
include_directories($ENV{HOME}/code/repo/other/GSL/include)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(proj_srcs main.cpp notes.txt)
add_executable(${PROJECT_NAME} ${proj_srcs})
include($ENV{HOME}/code/repo/other/pvs-studio-cmake-examples/PVS-Studio.cmake)
pvs_studio_add_target(TARGET ALL COMPILE_COMMANDS OUTPUT FORMAT errorfile)
警告
.../other/GSL/include/gsl/multi_span:663:1: warning: V547 Expression is always true.
.../other/GSL/include/gsl/multi_span:1163:1: warning: V560 A part of conditional expression is always true: totalSize <= (9223372036854775807L).
.../other/GSL/include/gsl/string_span:118:1: warning: V547 Expression 'cur != nullptr' is always true.
我仍然无法让它正常工作。
在 CMakeLists.txt 我有:
# The header files for the C++ Standard Library are located in /usr/include.
# Unfortunately ARGS --exclude-path /usr/include does not suppress the warnings
# generated by Clang.
pvs_studio_add_target(TARGET ALL COMPILE_COMMANDS OUTPUT FORMAT errorfile ARGS --exclude-path /usr/include)
使用 Clang 12.0.0 构建时 x86_64-pc-linux-gnu PVS Studio 生成数百行警告。例如,
--- snip ---
/include/c++/10/bits/stl_numeric.h:64:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:80:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:167:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:226:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/pstl/glue_numeric_defs.h:15:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
--- snip ---
有人知道哪里出了问题吗?
谢谢,
您可以使用这个参数:
-e [DIR], --exclude-path [DIR]
Directory whose files are not necessary to check
CMakeLists.txt:
pvs_studio_add_target(TARGET ALL
COMPILE_COMMANDS
OUTPUT FORMAT errorfile
ARGS -e /path/to/third/party -e /path/to/tests)
我在 Linux 上使用带有 CMake 的 PVS-Studio。我最近在我的项目中添加了一个第三方库。
PVS-Studio 正在标记第三方库的头文件中可能存在的问题。在分析我的代码时,如何让 PVS-Studio 忽略整个第三方库?当在 Windows 上使用带有 Visual Studio 的 PVS-Studio 时,我能够使用 Visual Studio 中的 PVS-Studio 扩展来做到这一点。 Linux 我没有。
我已将我的 CMakeLists.txt 文件附加到该项目(非常简单)以及 PVS-Studio 发出的警告列表。
CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
project(my_project)
include_directories($ENV{HOME}/code/repo/other/GSL/include)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(proj_srcs main.cpp notes.txt)
add_executable(${PROJECT_NAME} ${proj_srcs})
include($ENV{HOME}/code/repo/other/pvs-studio-cmake-examples/PVS-Studio.cmake)
pvs_studio_add_target(TARGET ALL COMPILE_COMMANDS OUTPUT FORMAT errorfile)
警告
.../other/GSL/include/gsl/multi_span:663:1: warning: V547 Expression is always true.
.../other/GSL/include/gsl/multi_span:1163:1: warning: V560 A part of conditional expression is always true: totalSize <= (9223372036854775807L).
.../other/GSL/include/gsl/string_span:118:1: warning: V547 Expression 'cur != nullptr' is always true.
我仍然无法让它正常工作。
在 CMakeLists.txt 我有:
# The header files for the C++ Standard Library are located in /usr/include.
# Unfortunately ARGS --exclude-path /usr/include does not suppress the warnings
# generated by Clang.
pvs_studio_add_target(TARGET ALL COMPILE_COMMANDS OUTPUT FORMAT errorfile ARGS --exclude-path /usr/include)
使用 Clang 12.0.0 构建时 x86_64-pc-linux-gnu PVS Studio 生成数百行警告。例如,
--- snip ---
/include/c++/10/bits/stl_numeric.h:64:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:80:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:167:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/numeric:226:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
/include/c++/10/pstl/glue_numeric_defs.h:15:1: warning: V1061 Extending the 'std' namespace may result in undefined behavior.
--- snip ---
有人知道哪里出了问题吗?
谢谢,
您可以使用这个参数:
-e [DIR], --exclude-path [DIR]
Directory whose files are not necessary to check
CMakeLists.txt:
pvs_studio_add_target(TARGET ALL
COMPILE_COMMANDS
OUTPUT FORMAT errorfile
ARGS -e /path/to/third/party -e /path/to/tests)