我想知道是否有任何工具可以对构建设置进行“静态分析”,特别是Visual-Studio C ++本机项目文件。 (* .vcproj for 2005/2008 - 我认为2010年引入了与MSBuild统一的新文件类型。)
我们想要在SCC中检查的所有项目/模块上自动检查的内容是:
NDEBUG
。)基本上我们有一个包含大量项目的源存储库,我们希望确保所有(组)项目都具有有效的构建设置,并且继续以获得有效的构建设置。
有没有这方面的工具,或者人们只是自己动手?
如果有很多开发人员,如何让项目设置/ MSBuild设置保持一致?
编辑:我也发布了这个over at the VC++ forums,虽然我在这里得到的答案为零,但我在那里得到零有用的答案。
我将废弃makefile代码并添加visual-c++代码,看看这是否更有意义:
对于我们的Visual-Studio-2005项目,我们已经进行了大部分上述检查。升级到VC10或VC11即将出现,并且 - 因为微软改变了项目文件格式 - 我必须抛弃我们拥有的工具并编写新的支票。这是MS的现实。他们将更改其项目文件格式。这不是抱怨,毕竟他们提供了一个像样的转换器,他们有他们的理由。但是,我会很乐意支付一种产品,该产品允许我检查统一设置,而无需在每次更改项目格式时重写我们的检查工具。
[a]:正如您所料。这些工具是内部编写的。有0.01个文档。并且很难维护。
答案 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
结合使用这样的一些帮助函数和一些搜索/替换功能,您可以根据自己的要求定制一个非常有用的分析/修复工具。