Makefile 对Visual C+;执行自动项目/生成设置检查的任何工具+;? < >我想知道是否存在任何工具来进行构建设置的静态分析,特别是VisualStudioC++本地项目文件。(*.vcproj for 2005/2008-我认为2010引入了一种与MSBuild统一的新文件类型。)

Makefile 对Visual C+;执行自动项目/生成设置检查的任何工具+;? < >我想知道是否存在任何工具来进行构建设置的静态分析,特别是VisualStudioC++本地项目文件。(*.vcproj for 2005/2008-我认为2010引入了一种与MSBuild统一的新文件类型。),makefile,visual-c++,visual-studio,automation,projects-and-solutions,static-analysis,Makefile,Visual C++,Visual Studio,Automation,Projects And Solutions,Static Analysis,我们希望在检查到SCC的所有项目/模块上自动检查的内容是: 检查所有预处理器定义。(例如,检查发布版本是否定义了NDEBUG) 确保所有相关项目的编译器优化设置都相同 确保如果项目链接到模块Y,它也链接到模块Z,但决不链接到模块a 确保所有相关项目使用相同的运行时库(链接)设置等 确保项目在发布和调试模式下生成可用且正确命名的pdb文件 确保组中的所有项目都包含abc.vsprops以进行其他设置 因此,基本上我们有一个包含大量项目的源存储库,我们希望确保所有(组)项目都具有有效的构建设置

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

  • 检查所有预处理器定义。(例如,检查发布版本是否定义了
    NDEBUG
  • 确保所有相关项目的编译器优化设置都相同
  • 确保如果项目链接到模块Y,它也链接到模块Z,但决不链接到模块a
  • 确保所有相关项目使用相同的运行时库(链接)设置等
  • 确保项目在发布和调试模式下生成可用且正确命名的pdb文件
  • 确保组中的所有项目都包含abc.vsprops以进行其他设置
因此,基本上我们有一个包含大量项目的源存储库,我们希望确保所有(组)项目都具有有效的构建设置,并且继续具有有效的构建设置

有没有什么工具可以实现这一点,或者人们只是自己滚动

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


编辑:我也发布了这篇文章,虽然我在这里没有得到任何答案,但在那里我没有得到任何有用的答案

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

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


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

我确实开始研究一个工具,做类似的事情来修复我们在本地遇到的一些问题(例如确保所有项目配置都具有相同的include路径)。我从来没有做到让它通用,但我认为一般原则可能有用。由于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

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

我确实开始使用一个工具来做类似的事情,以解决我们在本地遇到的一些问题(例如确保所有项目配置具有相同的include路径)。我从来没有做到让它通用,但我认为一般原则可能有用。由于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文件使用不同的格式。谢谢分享。是的,我们还基本上解析XML并检查需要检查的设置。现在我们需要在切换到VS10时重写所有检查,因为vcxproj文件使用不同的格式。