在命令行或CMake上为Visual Studio代码分析指定规则集

时间:2014-03-14 16:25:30

标签: c++ visual-studio cmake visual-studio-2013 code-analysis

我正在尝试为我的CMake驱动项目启用代码分析。我生成Visual Studio 2013解决方案,并希望使用特定规则集启用代码分析。我知道我可以通过在我的CMake文件中指定add_definitions(" / analyze")来启用代码分析,但是如何控制使用哪个规则集?

据我所知,控制使用的规则集的唯一方法是通过项目文件中的xml元素CodeAnalysisRuleSet,但我无法从CMake访问它。

3 个答案:

答案 0 :(得分:3)

如果您尝试为命令行构建解决此问题 - 通过cmake --build或直接调用msbuild - 而不是在使用Visual Studio生成的解决方案时,您可以设置调用构建时的相关属性。

用cmake驱动构建:

PS c:\build-dir> cmake --build . -- '/p:RunCodeAnalysis=true' `
                     '/p:CodeAnalysisRuleSet=NativeRecommendedRules.ruleset'

使用MSBuild驱动构建:

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'

(使用CMake 3.8.0测试,MSBuild 15.3.409.57025和Visual C ++ 2017 19.11.25506。)

答案 1 :(得分:2)

我不确定这对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。

当您使用@CMAKE_SOURCE_DIR@函数生成实际的 PROJECT.vcxproj.user 文件时,CONFIGURE_FILE将自动被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)

最后,我假设您可以使用这些模板用户定义 PROJECT.vcxproj 中的任何内容。

答案 2 :(得分:1)

VS2017:在CMakeSettings.json部分的“配置”中添加参数“ codeAnalysisRuleset”:“ NativeRecommendedRules.ruleset” 。然后在解决方案资源管理器中,右键单击需要的文件.cpp,选择菜单“在文件上运行代码分析”。您可以从VS文件夹“ c:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Team Tools \ Static Analysis Tools \ Rule Sets \ NativeRecommendedRules.ruleset”中的各种分析器中进行选择