【问题标题】: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”中的各种分析器中进行选择