我正在重新构建我们现有的代码库。我们正在迁移到 SVN 并期望软件活动增加,我需要一个可扩展且健壮的结构。
我希望我们的要求与其他公司的要求不会太不同,所以我会从你们那里得到一些反馈。
问题
我有许多项目:库和应用程序。应用程序依赖于库,并且一些库相互依赖。
我们有许多产品。每个产品都是一个 MSI,其中包含一些库和一些应用程序。
这些项目是 C++,它们之间的依赖关系是头文件和导入库/DLL——我们目前正在 Windows 下开发,但最终将移植到 MACOS 和 Linux。
尽管对于其中一些项目来说,每个项目都是一个独立的实体,但我们最终会同时更新其中的几个项目。例如,在处理 app_0 时,我们可能会更改 lib_a 中的一些代码(可能是错误修复、添加的功能等)。但我们不想强迫开发人员必须始终检查项目依赖项的源代码。
潜在的解决方案
每个项目都在 SVN 中自己的目录中,并且有一个“dependencies.txt”文件,其中列出了它需要的头文件、.libs 和 .dll 以及应该在磁盘上创建的位置。签出项目后,脚本会自动解析此文件以检索依赖项。头文件是从 SVN(部分检出)中检索的,而二进制文件是从服务器获取的。
项目遵循通常的主干/标签/分支结构。
在磁盘上,每个项目都存在于自己的目录中,采用扁平结构。输出目录包含二进制文件,这些二进制文件要么通过构建项目生成,要么作为处理“dependencies.txt”文件的结果从服务器复制。
- 输出
- win32_debug
- lib_a.lib
- lib_a.dll
- win32_debug
- lib_a
- 来源
- 上市
- lib_a.h
- 其他.h
- 项目_1
- 依赖项.txt
- 建造
- 来源
- 项目_1.cpp
这种结构意味着我们可以在 project_1 上工作,而无需检查 lib_a 的源代码。但是我们仍然可以将库签入“./lib_a”并使用其源代码而不需要对 project_1 进行任何修改,因为头文件和导入库的位置保持不变。
“安装程序”项目用于发布软件。该项目将检查发布所需的所有项目并构建它们。
在发布期间,会为所有项目创建一个“发布”分支。应该进入发布的所有更改都提交给它。这样,我们只需要在结帐(跟踪发布分支)上运行更新即可获得最新的更改。