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

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

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

2 ответа

Решение

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

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

Необходимые данные для прототипа файла.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>

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

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

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

Другие вопросы по тегам