Создать список исходных файлов, не зарегистрированных ни в одном проекте
Существует большое решение 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, но это сделает программу немного более сложной.