Я работаю над библиотекой C ++. В конце концов, я хотел бы сделать его общедоступным для нескольких платформ (по крайней мере, Linux и Windows) вместе с некоторыми примерами и привязками Python . Работа идет хорошо, но на данный момент проект довольно беспорядочный, построен исключительно на Visual C ++ и для него, а не мультиплатформенным вообще.
Поэтому я считаю, что нужно произвести уборку. Первое, что я хотел бы улучшить, это структуру каталогов проекта. Я хотел бы создать структуру, подходящую для инструментов Automake , чтобы облегчить компиляцию на нескольких платформах, но я никогда не использовал их раньше. Поскольку я все еще буду писать (большую часть) кодирования в Visual Studio, мне нужно будет где-то хранить мой проект Visual Studio и файлы решений.
Я попытался найти в Google такие термины, как «структура каталогов библиотеки C ++», но ничего полезного не обнаружил. Я нашел несколько очень простых рекомендаций, но не нашел кристально четких решений.
Изучая некоторые библиотеки с открытым исходным кодом, я пришел к следующему:
\mylib
\mylib <source files, read somewhere to avoid 'src' directory>
\include? or just mix .cpp and .h
\bin <compiled examples, where to put the sources?>
\python <Python bindings stuff>
\lib <compiled library>
\projects <VC++ project files, .sln goes in project root?>
\include?
README
AUTHORS
...
У меня нет / мало опыта работы с многоплатформенными проектами разработки / проектами с открытым исходным кодом, и я очень удивлен, что не могу найти никаких хороших рекомендаций о том, как структурировать такой проект.
Как вообще следует структурировать такой библиотечный проект? Что можно порекомендовать к прочтению? Есть хорошие примеры?
Ответы:
Одна вещь, которая очень распространена среди библиотек Unix, заключается в том, что они организованы следующим образом:
./ Makefile and configure scripts. ./src General sources ./include Header files that expose the public interface and are to be installed ./lib Library build directory ./bin Tools build directory ./tools Tools sources ./test Test suites that should be run during a `make test`
Это несколько отражает традиционную файловую систему Unix,
/usr
где:/usr/src Sometimes contains sources for installed programs /usr/include Default include directory /usr/lib Standard library install path /usr/share/projectname Contains files specific to the project.
Конечно, они могут оказаться в
/usr/local
(что является префиксом установки по умолчанию для GNU autoconf), и они могут вообще не придерживаться этой структуры.Нет жестких правил. Я лично так не организовываю. (Я
./src/
вообще избегаю использования каталога, за исключением, например, самых крупных проектов. Я также не использую автоинструменты, предпочитая вместо этого CMake.)Я предлагаю вам выбрать макет каталога, который имеет смысл для вас (и вашей команды). Делайте то, что наиболее разумно для выбранной вами среды разработки, инструментов сборки и системы управления версиями.
источник
Я недавно наткнулся на замечательное соглашение, которое может оказаться полезным: Макет вилы (также на GitHub ).
Подводя итог, в подразделе 1.3 говорится, что:
Кроме того, я думаю, что
extras/
каталог - это то место, куда должны идти ваши привязки Python .источник
Я не думаю, что для этого есть какие-то хорошие рекомендации. По большей части это просто личные предпочтения. Однако некоторые IDE определяют для вас базовую структуру. Visual Studio, например, создаст отдельную папку bin, которая разделена на подпапки Debug и Release. В VS это имеет смысл, когда вы компилируете свой код с использованием разных целей. (Режим отладки, режим выпуска.)
Как сказано в Greyfade, используйте макет, который вам понятен. Если кому-то это не нравится, им просто придется реструктурировать это самостоятельно. К счастью, большинство пользователей будут довольны выбранной вами структурой. (Если это действительно не беспорядок.)
источник
Я считаю, что библиотека wxWidgets (с открытым исходным кодом) является хорошим примером. Они поддерживают множество различных платформ (Win32, Mac OS X, Linux, FreeBSD, Solaris, WinCE ...) и компиляторы (MSVC, GCC, CodeWarrior, Watcom и т. Д.). Вы можете увидеть схему дерева здесь:
https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/
источник
Я действительно могу порекомендовать вам использовать CMake ... это для кроссплатформенной разработки, и он намного более гибкий, чем automake, используйте CMake, и вы сможете писать кросс-платформенный код со своей собственной структурой каталогов во всех системах.
источник