我一直在使用子模块将项目包含在“超级项目”中。
尽管我在一个超级项目中多次包含相同的子模块,但我遇到了烦恼。
例如,假设我有一个名为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++ 项目。