Как организовать проект с открытым исходным кодом C ++ с IDE, чтобы поделиться им на github

Я хотел бы знать (согласно Принцип Наименьшего Сюрприза) как организовать проект C ++ с компромиссами, например, чтобы его можно было легко разделить git (например, на github), или упростите для всех, кто заинтересован, импортировать исходные файлы в свою среду.

В качестве примера я бы сослался на Code::Blocks так как я в настоящее время начинаю его использовать, но вопрос должен быть более общим для любой IDE.


Как я в настоящее время делаю:

У меня есть структура каталогов, как это (словари начинаются с /комментировать с // ):

/.git             // git repo metadata
/common           // source code shared between projects
/math
/physics
/GraphicsUtils
/common_data      // shared data (resources)
/apps             // executable projects ( use cases )
/SailWar       // game about fighting sail boats
/AirCraftSimulator
/SpaceShipSimulator
/libs             // dynamic library projects
/OrbitalMechanics

В каждой папке проекта для конкретной исполняемой программы у меня есть такая структура:

/SailWar
/bin         // CodeBlocks binary output
/data        // my datafiles (resources) required for program to run
/src         // my source code
/obj         // CodeBlocks compiled objects files
main.cpp
makefile
program.x       // binary
SailWar.cbp     // CodeBlocks project file
SailWar.depend  // CodeBlocks .depend
SailWar.layout  // CodeBlocks .layout
test            // bash script to make clean, make and run the binary

В .git/info/exclude Я имею:

*~ *.pyc *.o *.a *.so *.x bin obj .depend .layout

чтобы убедиться, что только исходные файлы (не выходные и временные файлы) загружаются в github


То, что я не доволен / уверен в:

  1. Должен ли я держать (отслеживать) .depend .layout в мерзавце?
  2. Является CodeBlocks проект .cbp достаточно переносной и в общем, или я все еще должен держать makefile способ компиляции. Лучше всего, если CodeBlocks может использовать makefile вместо .cbp
  3. когда скомпилированный бинарный файл помещен в /bin у него нет правильного пути к /data
  4. Я не совсем уверен, как лучше подключить общий код /common и ресурсы /common_data, В данный момент ставлю ../../common в пути поиска компилятора … но я не уверен, что это лучший способ.
  5. Я бы предпочел сделать один файл проекта для всего (все исполняемые файлы, все библиотеки в одном). Я думаю, что это сделало бы это более понятным для любого потенциального пользователя, который скачивает его с github, Но это, вероятно, не возможно (?) (Я читал этот вопрос об этом.)

0

Решение

В настоящее время я занимаюсь довольно большим проектом со многими движущимися частями, поэтому мне пришлось придумать хороший способ организации всех моих путей, чтобы был какой-то порядок в безумии.

По сути, у меня есть корневой каталог, в котором находятся все мои подпапки проекта, а затем в каждой папке проекта есть папка включения, но все проекты используют одну и ту же папку вывода. Я также использую различные файлы .workspace для организации различных проектов в группы. Таким образом, я могу сохранить детерминированную структуру папок для всего моего проекта (внутри одной и той же папки), но при этом сохранять их организованными.

   \root\develop\.workspace
\root\develop\[project]\.cbp
\root\develop\[project]\include
\root\develop\[project]\obj
\root\develop\bin
\root\develop\external\bin
\root\develop\external\include

Если вы хотите, вы можете посмотреть, проверив исходное дерево и пройдя через многочисленные проекты и варианты проектов. Эта структура каталогов поддерживает несколько библиотек, исполняемых файлов и внешних зависимостей. Это определенно стоит посмотреть.
https://github.com/zackeryfix/ngen/tree/master/develop/now

0

Другие решения

Заставить ваш проект зависеть от IDE — плохая идея. Это одна из причин cmake был создан. Поэтому я рекомендую вам использовать CMake в качестве системы сборки и любую IDE, которая вам нравится, которая поддерживает управление проектами CMake.

Мой личный выбор, например, KDevelop.

-1

По вопросам рекламы [email protected]