#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, но это немного усложнило бы программу.