Какие-нибудь инструменты, которые выполняют автоматическую проверку параметров проекта / сборки для Visual-C ++? - PullRequest
1 голос
/ 23 августа 2011

Я хотел бы узнать, существуют ли какие-либо инструменты, которые выполняют «статический анализ» параметров сборки, в частности файлов проекта Visual-Studio C ++. (* .vcproj для 2005/2008 - я думаю, что 2010 вводит новый тип файла, унифицированный с MSBuild.)

Вещи, которые мы хотели бы проверять автоматически во всех проектах / модулях, проверенных в SCC:

  • Проверьте все определения препроцессора. (например, убедитесь, что в сборке выпуска определено NDEBUG.)
  • Убедитесь, что настройки оптимизации компилятора одинаковы для всех связанных проектов.
  • Убедитесь, что если проект связан с модулем Y, он также связан с модулем Z, но никогда с модулем A.
  • Убедитесь, что все связанные проекты используют одинаковые настройки библиотеки времени выполнения (linkage) и т. Д.
  • Убедитесь, что проекты генерируют пригодный для использования и правильно названный файл pdb в режиме выпуска и отладки.
  • Убедитесь, что все проекты в группе содержат abc.vsprops для дополнительных настроек.
  • ...

Таким образом, в основном у нас есть исходный репозиторий с большим количеством проектов, и мы хотели бы убедиться, что все (группы) проектов имеют действительные параметры сборки, а также продолжают иметь действительные параметры сборки.

Есть ли какие-нибудь инструменты для этого, или люди просто крутят свои собственные?

Как сохранить согласованность настроек проекта / MSBuild при наличии большого количества разработчиков?


Редактировать : я также разместил это на форумах VC ++ и, хотя я получил здесь 0 ответов на SO, я получил 0 полезных ответов там.

Я исключу тег и добавлю тег и посмотрим, будет ли в этом больше смысла:

У нас уже есть большинства вышеуказанных проверок для наших проектов Visual-Studio-2005. Обновление до VC10 или VC11 приближается, и - поскольку Microsoft изменила формат файла проекта - мне придется выбросить инструменты [a], которые у нас есть, и написать новые проверки . Это реальность с MS. Они будут изменять формат файла своего проекта. Это не на что жаловаться, ведь они обеспечивают достойный конвертер, и у них есть свои причины. Однако я бы с удовольствием заплатил бы за продукт, который позволял мне проверять единообразные настройки, не переписывая наши инструменты проверки каждый раз, когда изменяется формат проекта.

[a]: Как и следовало ожидать. Эти инструменты были написаны на месте. Есть 0,01 документов. И поддерживать ужасно.

1 Ответ

1 голос
/ 29 сентября 2011

Я начал работу над инструментом, чтобы сделать что-то похожее на это, чтобы исправить некоторые проблемы, которые у нас были локально (например, гарантировать, что все конфигурации проекта имеют одинаковые пути включения). Мне никогда не удавалось сделать его общим, но я думаю, что общие принципы могут быть полезны. Благодаря структуре проекта 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

Благодаря сочетанию нескольких вспомогательных функций, подобных этой, и некоторых функций поиска / замены вы можете сделать весьма полезный инструмент анализа / исправления, настроенный в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...