Я разрабатываю коллекцию классов C++ и борюсь с тем, как разделить код таким образом, который поддерживает организацию, не ставя под угрозу легкость компиляции для пользователя коллекции.Как структурировать «библиотеку» источника C++?
Варианты, которые я видел, включают в себя:
- Распределить скомпилированный файл библиотеки
- Вставьте источник в заголовочном файле (с неявной рядный, как описано в этом answer)
- использовать символические ссылки, чтобы позволить компилятор для поиска файлов.
настоящее время я использую третий вариант, где для каждого класса я хочу, чтобы включить I символические ссылки каждый classess заголовков и исходных файлов (например ln -s <path_to_class folder>/myclass.cpp
) Это работает хорошо, за исключением, что я не могу переместить папку проекта location (он разрывает все символические ссылки), и мне нужно, чтобы все эти символические файлы висели вокруг.
Мне нравится второй вариант (он имеет внешний вид Java), но я беспокоюсь о раздувании кода, если все объявлено встроенным.
Пользователь коллекции создаст папку проекта где-нибудь и каким-то образом включит сборку в свой процесс компиляции.
Я хотел бы несколько вещей, которые можно:
- Easy компиляции (что-то вроде
gcc *.cpp
из папки проекта) - Простого распределения библиотеки в неоткомпилированной форме.
- Организация библиотеки по модулю.
- Скомпилированный размер кода не раздувается.
Я не беспокоюсь о документации (Doxygen позаботится об этом) или времени компиляции: общие модули небольшие, и даже самые большие проекты на самых медленных машинах не будут занимать больше нескольких секунд для компиляции.
Я использую компилятор GCC, если это имеет значение.
Файлы библиотеки в основном являются стандартными. Если у вас есть оговорки в отношении создания библиотек, подумайте о них.Это проще в использовании, чем make, и не привяжет ваш код к пути configure/make. Это также упрощает работу портов в Windows. – Jiminion