我一直在使用子模块将项目包含在“超级项目”中。
尽管我在一个超级项目中多次包含相同的子模块,但我遇到了烦恼。
例如,假设我有一个名为Helpers
.
然后我有一个项目,GeometryHelpers
它包括Helpers
一个子模块。
然后我有另一个称为AlgebraHelpers
子Helpers
模块的项目。
到目前为止一切顺利,这让我可以重用我的Helpers
代码。
但是,现在说我有一个名为的项目Math
,它具有子模块GeometryHelpers
和AlgebraHelpers
子模块。
现在我有两份Helpers
(Math/GeometryHelpers/Helpers
和Math/AlgebraHelpers/Helpers
)。
如果我必须更改 中的某些Helpers
内容,那么我必须确保不要忘记在两个地方都更新它,否则我可能会期望事情不同步。
Helpers
如果发生变化(经常发生),我当前的更新过程是:
cd Math/GeometryHelpers/Helpers; git pull
cd ..; git add -u; git commit; git push # update the pointer to Helpers in GeometryHelpers
cd ../AlgebraHelpers/Helpers; git pull;
cd ..; git add -u; git push # update the pointer to Helpers in AlgebraHelpers
cd ..; git add -u; git push # update the pointers to AlgebraHelpers and GeometryHelpers in Math
似乎理想的情况是拥有 Math/Helpers,并拥有Math/AlgebraHelpers
和Math/GeometryHelpers
使用相同的Math/Helpers
.
但是要设置这样的东西,似乎很难保持以AlgebraHelpers
独立方式构建的能力(即不在数学内部)。
我真的不想构建库并将它们安装在系统上的某个地方,因为当我在工作并GeometryHelpers
想要更新某些内容时Helpers
,我必须打开Helpers
项目,构建库并将其安装到任何地方GeometryHelpers
为了它。
这不是一个特别顺利的过程,尤其是因为Helpers
经常变化。
有没有更好的方法来处理这个?
我使用 CMake 作为我的构建系统,所有这些项目都是 c++ 项目。