我使用cmake(3.23+)为MSVC生成解决方案文件(通过CMakeLists.txt)。
我想对生成的项目启用静态分析,并让它使用我的自定义规则集。我知道MSVC支持一个CmakeSettings.json文件,可以做到这一点,但我不明白它如何与CMakeLists.txt/如何应该包括在这里。
我试过通过命令行参数来实现:
target_compile_options ( ${PROJECT_NAME}
PRIVATE /MP /analyze /analyze:ruleset ${CMAKE_CURRENT_SOURCE_DIR}/use-after-move.ruleset
)
但是编译器将规则集视为另一个.cpp文件进行编译。生成的命令行如下所示:
CL.exe /c ...list of include directories... /Zi /nologo /W1 /WX- /diagnostics:column /MP /Od /Ob0 /D _MBCS /D WIN32 /D _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++latest /Fo"editor-lib.dir\Debug\\" /Fd".\vsbuild\lib\Debug\editor-lib-d.pdb" /external:W1 /Gd /TP /analyze /errorReport:prompt path/to/use-after-move.ruleset ...list of source files...
我试着用双引号把/analyze:ruleset
括起来,但结果是一样的。我也试着用单引号把它括起来,这样它就可以在编译选项中显示出来了,不过是这样的:
'/analyze:ruleset' path/to/ruleset
我也可能错误地使用了这些选项,因为当我手动将它们插入项目属性时,分析不会执行。只有当我删除/analyze:ruleset
并只保留/analyze
时,分析才会执行(但它默认为Microsoft的所有规则)。
1条答案
按热度按时间q8l4jmvw1#
我在这条帖子里找到了答案:How to add Property to Affect Code Analysis in CMake
创建用户属性表(另存为EnableUseAfterMoveAnalysis.props):
然后在CMakeLists.txt中使用set_property将其绑定到项目: