任何执行自动化项目/构建设置的工具都会检查Visual-C ++?

时间:2011-08-23 08:48:33

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

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

我们想要在SCC中检查的所有项目/模块上自动检查的内容是:

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

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

有没有这方面的工具,或者人们只是自己动手?

如果有很多开发人员,如何让项目设置/ MSBuild设置保持一致?


编辑:我也发布了这个over at the VC++ forums,虽然我在这里得到的答案为零,但我在那里得到零有用的答案。

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

对于我们的Visual-Studio-2005项目,我们已经进行了大部分上述检查。升级到VC10或VC11即将出现,并且 - 因为微软改变了项目文件格式 - 我必须抛弃我们拥有的工具并编写新的支票。这是MS的现实。他们更改其项目文件格式。这不是抱怨,毕竟他们提供了一个像样的转换器,他们有他们的理由。但是,我会很乐意支付一种产品,该产品允许我检查统一设置,而无需在每次更改项目格式时重写我们的检查工具。

[a]:正如您所料。这些工具是内部编写的。有0.01个文档。并且很难维护。

1 个答案:

答案 0 :(得分: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

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