(以下是我在组织我正在处理的源代码时遇到的各种复杂性的“理论MCVE”。你可以将它视为一个具体的问题而且会很好,或者你可以参考它提出的一般问题,并建议如何解决它们。)
假设我有代码A,B,C和D的模块.A取决于B,C,D; B取决于C; C,D不依赖于其他模块。 (我松散地使用术语“模块”,所以请不要在这里挑剔。)
此外,在A,B,C,D的所有部分中,使用了一些相同的头文件,甚至可能是编译对象,将它们组合在一起形成第五个模块是没有意义的,因为它会太小而且没用。我们让foo.h
成为该类别中的一个文件。
虽然所有这些模块都保存在单个整体代码库中,但一切都很好。一切都是一个副本;在使用相同功能等编译的对象之间没有链接器冲突。
问题是:如何将B,C,D中的每一个都放入版本管理的存储库中,以便:
foo.h
的qudaruple副本和C的双重副本(一次用于A,一次用于B) - 我可能总是有确保并保持完美同步。请注意,当我有更多时间时,我会编辑它以使问题更具体(即使我有点像广泛的问题)。我会说,在我的具体情况下,代码是现代C ++,CUDA,一些bash脚本和CMake模块。因此,面向Java的解决方案不会这样做。
答案 0 :(得分:1)
非常简单,您可能想要探索工件存储库(Artifactory)和依赖关系管理解决方案(Ivy,Maven,Gradle)。然后,当构建共享基础模块时,将其粘贴在工件仓库中。当你想构建依赖于共享库模块的顶级模块时;构建脚本只需简化最后一个版本的共享基础模块,并链接/编译顶层模块,而不是它下拉的内容。