сгенерировать список исходных файлов, не зарегистрированных ни в одном проекте

#visual-c

#visual-c

Вопрос:

Существует большое решение на MSVC c . Состоящий из десятков проектов.
Как я могу сгенерировать список файлов .h,.cpp, которые нарушают одно из следующих правил согласованности:
— файл (.cpp,.h) существует, но не зарегистрирован ни в одном проекте
— файл (.cpp,.h) включен, но не зарегистрирован в проекте
— проект регистрирует исходный файл, которого нет в каталоге проектов

Каталог решения прост.Это одноуровневый набор каталогов в каталоге базы решений, каждый каталог — это один проект, если это поможет.

Ответ №1:

Единственное решение, которое вам нужно сделать, это написать скрипт, чтобы пройти по всем каталогам вашего проекта и прочитать все ваши файлы .vcproj (файлы, подобные XML).

Если вы используете Python, я советую вам использовать модули xml.dom и xml.dom.minidom для чтения файлов .vcproj и операционной системы.функция обхода каталогов вашего проекта.

Файл .vcproj прототипирует необходимые данные для вас следующим образом :

 <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject Name=......>
  <Files>
    <Filter Filter="cpp;c;cc;cxx;........>
      <File RelativePath="YOUR.cpp file here"/>
      ...
    </Filter>
    <Filter Filter="h;hpp;hxx;........>
      <File RelativePath="YOUR.h file here"/>
      ...
    </Filter>
  </Files>
</VisualStudioProject>
  

Ответ №2:

Какую версию VS вы используете?

Не уверен, что вы подразумеваете под «зарегистрированными в любом проекте», но вот отправная точка: вы можете получить список всех .файлы h и .cpp, выполнив (рекурсивный) список каталогов из корневого каталога. Поскольку решение и файлы проекта представляют собой просто файлы .xml (по крайней мере, в более поздних версиях VS), вы можете просто использовать регулярные выражения, чтобы извлечь все файлы .h и .cpp, на которые есть ссылки, а затем перекрестно ссылаться на список, который вы получили при составлении списков каталогов, с теми, которые вы можете проанализировать из файлов проекта. В вашем случае ваша простая структура каталогов немного упрощает поиск.

Если по вашему второму пункту вы имеете в виду «включенный другим источником или заголовком», то, я думаю, вам нужно прочитать все.файлы h и .cpp и выполните поиск по операторам #include, но это немного усложнило бы программу.