【问题标题】:Any tools that do automated project/build settings checks for Visual-C++?有任何工具可以自动检查 Visual-C++ 的项目/构建设置吗?
【发布时间】:2011-09-29 16:35:30
【问题描述】:

我想了解是否存在对构建设置进行“静态分析”的任何工具,特别是 Visual-Studio C++ 本机项目文件。 (*.vcproj for 2005/2008 - 我认为 2010 引入了一种与 MSBuild 统一的新文件类型。)

我们希望在签入 SCC 的所有项目/模块上自动检查的内容是:

  • 检查所有预处理器定义。 (例如,检查发布版本是否定义了 NDEBUG。)
  • 确保所有相关项目的编译器优化设置都相同。
  • 确保如果项目链接到模块 Y,它也链接到模块 Z,但永远不会链接到模块 A。
  • 确保所有相关项目使用相同的运行时库(链接)设置等。
  • 确保项目在发布和调试模式下生成可用且名称正确的 pdb 文件。
  • 确保组中的所有项目都包含 abc.vsprops 以进行其他设置。
  • ...

所以基本上我们有一个包含大量项目的源代码库,我们希望确保所有(组)项目确实具有有效的构建设置,并且继续具有有效的构建设置。

是否有任何工具可以做到这一点,或者人们只是自己动手?

当您有很多开发人员时,如何使您的项目设置/MSBuild 设置保持一致?


编辑:我还发布了这个over at the VC++ forums,虽然我在 SO 上得到了零个答案,但我得到了零个有用个答案。

我将废弃 标签并添加 标签,看看这是否更有意义:

我们已经为我们的 Visual-Studio-2005 项目实施了上述大部分检查。 VC10 或 VC11 的升级迫在眉睫,而且——因为微软改变了项目文件格式——我将不得不扔掉我们拥有的工具[a]并编写新的检查。这就是 MS 的现实。他们改变他们的项目文件格式。这不是抱怨,毕竟他们提供了一个不错的转换器,他们有他们的理由。但是,我会很乐意购买一种产品,该产品允许我在每次更改项目格式时无需重写我们的检查工具即可检查统一设置。

[a] :正如你所料。这些工具是内部编写的。有 0.01 个文档。而且维护起来很糟糕。

【问题讨论】:

    标签: makefile visual-c++ visual-studio visual-c++ automation projects-and-solutions static-analysis


    【解决方案1】:

    我确实开始研究一个工具来做类似的事情来解决我们在本地遇到的一些问题(例如确保所有项目配置具有相同的包含路径)。我从来没有把它变成通用的,但我认为一般原则可能是有用的。由于 XML 项目结构 XPath 类型的查询使得访问您需要的数据变得容易。我在 Ruby 中写了几个辅助函数来做这种事情:

    require 'rexml/document'
    include REXML
    
    def GetIncludeDirsStringForConfig(root, config)
      incs=""
      name=config.attributes['Name']
      configs = root.each_element("//Tool[@Name='VCCLCompilerTool']") do |tool|
        incs=tool.attributes['AdditionalIncludeDirectories']
      end
      return incs
    end
    
    def FindConfig(root, name)
     root.each_element("//Configuration") do |config|
      thisName=config.attributes['Name']
      if (name==thisName || name=thisName + "|Win32") 
        return config
      end
     end
    return nil
    end
    
    file=File.new(vcprojFilename)
    doc = Document.new(file)
    root = doc.root
    
    # list configurations:
    configs = root.each_element("//Configuration") do |config|
      name=config.attributes['Name']
      puts name
    end
    

    结合一些像这样的辅助功能和一些搜索/替换功能,您可以根据自己的需求定制一个非常有用的分析/修复工具。

    【讨论】:

    • 感谢分享。是的,我们本质上也是解析 XML 并检查我们需要检查的设置。现在我们需要在切换到 VS10 时重写所有检查,因为 vcxproj 文件使用不同的格式。
    猜你喜欢
    • 2010-09-08
    • 2013-05-11
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2012-03-13
    • 2017-11-29
    相关资源
    最近更新 更多