Добрый вечер.
Предупреждаю сразу: данная тема не содержит проблемы. И создана исключительно для интересного время провождения.
Итак, дабы немножко скоротать вечер за интересной (я надеюсь) задачкой, решил запостить ребус:
Рассмотрим следующую иерархию каталогов, которая содержит библиотеки:
external
|
|--common_lib
| |
| |--lib1
| | |--include
| | | `--lib1.h
| | |--lib32
| | | `--lib1.lib
| | `--lib64
| | `--lib1.lib
| `--lib2
| |--include
| | `--lib2.h
| |--lib32
| | `--lib2.lib
| `--lib64
| `--lib2.lib
|
`--add
|--include
| `--add.h
|--lib32
| `--add.lib
`--lib64
`--add.lib
Очевидно, что в данном случае получается 3 библиотеки: lib1, lib2, add.
Как именно человек, глядя на иерархию каталогов определяет имена и месторасположение библиотек?
Очень просто:
Он видит файлы из которых могут состоять библиотеки: *.lib и *.h
И находит каталог, общий для этих файлов.
Имя этого каталога и определяет и имя, и месторасположение библиотеки.
--------------------------------------
По задачке мы не видим наглядно никакой иерархии.
Нам на вход дали очень большой список файловых путей.
Например такой:
external/common_lib/lib1/include/lib1.h
external/common_lib/lib1/lib32/lib1.lib
external/common_lib/lib1/lib64/lib1.lib
external/common_lib/lib2/include/lib2.h
external/common_lib/lib2/lib32/lib2.lib
external/common_lib/lib2/lib64/lib2.lib
external/add/include/add.h
external/add/lib32/add.lib
external/add/lib64/add.lib
Список может быть не отсортированным.
В нем могут оказаться "левые" пути, например к файлам документации, или к ресурсам.
В нем могут оказаться "левые" пути, например к каталогу вообще без файлов.
(для простоты будем считать, что имя без расширения - это каталог)
Если в пути, в имени каталога или файла присутствует *ignore*, то такой путь должен быть сразу же проигнорирован.
Если в пути, в имени каталога, или файла сначала постречалось *32, а затем *64, то должно быть выдано предупреждение, а сам файл - проигнорирован.
Если в пути, в имени каталога, или файла сначала постречалось *64, а затем *32, то должно быть выдано предупреждение, а сам файл - проигнорирован.
В качестве расширений файлов из которых может состоять либка - h,hpp,lib,dll
1. Нужно просканировать список путей, и обнаружить месторасположение и имена всех библиотек.
2. Пользователь указывает имя библиотеки, и адресную модель (32/64), и на выходе получает пути к хэдэрам библиотеки, пути к либкам, и список имен либок.