Наш проект C ++ состоит из нескольких модулей (== подпапок), а заголовки располагаются рядом с файлами. cpp:
CMakeLists.txt
src
│
└───folder1
│ │
│ └───subfolder1
│ │ MyClass1.h
│ │ MyClass1.cpp
│ │ ...
│
└───folder2
│ │
│ └───subfolder2
│ │ MyClass2.h
│ │ MyClass2.cpp
│ │ ...
Директивы include всегда определяются относительно папки 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
для CLI cppcheck, макросы правильно идентифицированы и обнаружены реальные проблемы, подобные описанным выше, но время анализа возрастает с 2 до 20 минут .
Я подозреваю, что, предоставляя все исходный код снова через -I
, все файлы повторно анализируются как заголовочные файлы. К сожалению, у меня нет указанной подпапки c include/
, которую я могу использовать здесь. Что здесь советуют? Я уже использую несколько заданий: -j 4
.