Я хотел бы знать (согласно Принцип Наименьшего Сюрприза) как организовать проект 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
То, что я не доволен / уверен в:
.depend .layout
в мерзавце?CodeBlocks
проект .cbp
достаточно переносной и в общем, или я все еще должен держать makefile
способ компиляции. Лучше всего, если CodeBlocks может использовать makefile вместо .cbp
/bin
у него нет правильного пути к /data
/common
и ресурсы /common_data
, В данный момент ставлю ../../common
в пути поиска компилятора … но я не уверен, что это лучший способ. github
, Но это, вероятно, не возможно (?) (Я читал этот вопрос об этом.) В настоящее время я занимаюсь довольно большим проектом со многими движущимися частями, поэтому мне пришлось придумать хороший способ организации всех моих путей, чтобы был какой-то порядок в безумии.
По сути, у меня есть корневой каталог, в котором находятся все мои подпапки проекта, а затем в каждой папке проекта есть папка включения, но все проекты используют одну и ту же папку вывода. Я также использую различные файлы .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
Заставить ваш проект зависеть от IDE — плохая идея. Это одна из причин cmake
был создан. Поэтому я рекомендую вам использовать CMake в качестве системы сборки и любую IDE, которая вам нравится, которая поддерживает управление проектами CMake.
Мой личный выбор, например, KDevelop.