【问题标题】:Specify ruleset for Visual Studio code analysis on command line or from CMake在命令行或从 CMake 指定用于 Visual Studio 代码分析的规则集
【发布时间】:2014-04-20 01:52:08
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    如果您尝试通过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 测试。)

    【讨论】:

      【解决方案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>

      您可能需要将工具版本更改为 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)
      

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

      【讨论】:

        【解决方案3】:

        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”中的各种分析器中进行选择

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-15
          相关资源
          最近更新 更多