我正在尝试为我的CMake驱动项目启用代码分析。我生成Visual Studio 2013解决方案,并想使用特定的规则集启用代码分析。我知道我可以通过在我的CMake文件中指定add_definitions(“/ analyze”)来启用代码分析,但是如何控制使用哪个规则集呢?
据我所见,唯一控制使用的规则集的方法是通过项目文件中的xml元素CodeAnalysisRuleSet,但我无法从CMake访问它。
我正在尝试为我的CMake驱动项目启用代码分析。我生成Visual Studio 2013解决方案,并想使用特定的规则集启用代码分析。我知道我可以通过在我的CMake文件中指定add_definitions(“/ analyze”)来启用代码分析,但是如何控制使用哪个规则集呢?
据我所见,唯一控制使用的规则集的方法是通过项目文件中的xml元素CodeAnalysisRuleSet,但我无法从CMake访问它。
cmake --build
还是直接调用msbuild
--而不是在使用Visual Studio生成的解决方案时,您可以在调用构建时设置相关属性。PS c:\build-dir> cmake --build . -- '/p:RunCodeAnalysis=true' `
'/p:CodeAnalysisRuleSet=NativeRecommendedRules.ruleset'
PS c:\build-dir> msbuild ALL_BUILD.vcxproj '/p:RunCodeAnalysis=true' `
'/p:CodeAnalysisRuleSet=NativeRecommendedRules'
如果您有一个自定义目录中的自定义规则集,您还需要设置属性CodeAnalysisRuleSetDirectories
:
PS c:\build-dir> cmake --build . -- '/p:RunCodeAnalysis=true' `
'/p:CodeAnalysisRuleSet=custom.ruleset' `
'/p:CodeAnalysisRuleSetDirectories=c:\src\ruletsets'
我不确定这对于VS2013解决方案是否适用。在使用Visual Studio 2015时,我使用项目用户模板(*.vcxproj.user),格式如下:
C:\MyProject\Template.USERNAME.user
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<CodeAnalysisRuleSet>@CMAKE_SOURCE_DIR@\SecurityRecommended.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
</Project>
您可能需要更改一些内容,例如将ToolsVersion更改为12.x。
当您使用CONFIGURE_FILE
函数生成实际的PROJECT.vcxproj.user文件时,@CMAKE_SOURCE_DIR@
将自动被cmake替换。我在我的项目的CMakeLists.txt中有以下行:
SET(USER_NAME $ENV{USERNAME} CACHE STRING UserName)
SET(USER_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.vcxproj.user)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/Template.${USER_NAME}.user ${USER_FILE} @ONLY)
VS2017: 在CMakeSettings.json的"configuration"部分中添加参数"codeAnalysisRuleset": "NativeRecommendedRules.ruleset"。然后在解决方案资源管理器中右键单击需要的.cpp文件,选择菜单"Run Code Analysis on File"。你可以从VS文件夹"c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset"中选择各种分析工具。