我们的 C++ 项目被组织在几个模块(== 子文件夹)中,头文件放在 .cpp 文件旁边:
CMakeLists.txt
src
│
└───folder1
│ │
│ └───subfolder1
│ │ MyClass1.h
│ │ MyClass1.cpp
│ │ ...
│
└───folder2
│ │
│ └───subfolder2
│ │ MyClass2.h
│ │ MyClass2.cpp
│ │ ...
包含指令总是相对于文件夹
src
定义。并且与代码文件无关,例如在 MyClass1.cpp 中:#include "folder1/subfolder1/MyClass1.h" // even the own header is defined semi-relatively
#include "folder2/subfolder2/MyClass2.h"
MyClass1::MyClass1() {
// some code
}
我最近注意到 cppcheck(1.89 版)有这方面的问题并且不正确
MyClass::MyClass() : _foo(_foo) {}
)-> 没有关于错误代码的投诉 当提供
-I src
在 cppcheck CLI 中,可以正确识别宏并发现上述实际问题,但分析时间从 开始飙升2 到 20 分钟 .我怀疑,通过
-I
再次提供整个源代码,这些文件都被重新解析为头文件。不幸的是,我没有具体的 include/
我可以在这里使用的子文件夹。这里有什么建议?我已经在使用多个工作:-j 4
.
最佳答案
经过进一步调查,这实际上可能不是一个有效的问题:
find . -type f \( -iname \*.h -o -iname \*.inl -o -iname \*.hpp \) -exec cp --parents \{\} ./../__cppcheckWorkaroundInclude \;
然后我通过 -I
提供到 cppcheck -I __cppcheckWorkaroundInclude
或 -I src
到 cppcheck 并没有什么不同 - 至少我没有观察到。 意思是,-I
按预期工作 为了解决性能问题(我在 CI 中运行作业,而 20 分钟是我宁愿花在执行自动化测试上的很多时间),我做了以下事情:
--max-configs=5
--cppcheck-build-dir=CppcheckBuildDir
使用增量检查要将其集成到我们的 Gitlab CI 中,我必须缓存此目录:
cache:
paths:
- CppcheckBuildDir
在调用 cppcheck 之前,必须创建目录(但使用
-p
标志,因为目录可能已经存在,从缓存中获取!):mkdir -p CppcheckBuildDir
关于c++ - 如何使用 cppcheck 处理半相对包含路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264915/