I’ve been using project options as a way to get some solid defaults for my projects without too much trouble.
One problem I’ve been running into though is the CMAKE_$LANG_CPPCHECK defaults and how they apply to 3rd party dependencies.
It seems like when this option is set, 3rd party libraries (in my case, Catch2) are also subject to these globals. Static analysis (e.g. cppcheck) is performed on them and fails, when it is not my intention to run it on these 3rd-party libs. If it matters, I’m using CPM to download Catch2.
Is there a preferred way to globally ignore 3rd party libraries globally from static analysis like cppcheck?
My current approach is to do set_target_properties(my_target PROPERTIES CXX_CPPCHECK ${some_good_options}), where some_good_options are the ones set by project_options. I clear these CMAKE_$LANG_CPPCHECK properties right after calling into project_options for it to set them up.
I would make sure that the project isn’t setting up CMAKE_CXX_CPPCHECK itself. Or you may need to also unset CMAKE_C_CPPCHECK. Configuring with cmake --trace-expand may help surface any such code.
No, the subproject is also my CMakeLists.txt and I do not use CPPCHECK there, also unsetting CMAKE_C_CPPCHECK is not helping.
I assume --trace-expand is something like a verbose cmake mode? I never used it before, but when I add this option then cmake finishes with errors, whereas it finishes fine without it.
It does enable some developer mode bits as well, but there’s not enough context here to know. Basically, something is setting the <LANG>_CPPCHECK property on the relevant targets; that needs found.
I suppose one thing that could be confusing it is a cache variable. If a cache variable exists, unset(CMAKE_<LANG>_CPPCHECK will only unset the scoped variable of that name.