2

目前,我正在开发一个嵌入式项目。目前,我只有一个本地 git 存储库,因为我是唯一的开发人员。但是,我正在考虑使其成为开源并将其移至 github(如果达到一定程度的功能 :-))。所以,我想了很多关于制定一个好的项目结构,以便其他开发人员可以加入。

好吧,目前,该项目是一个非常简单的设置。

我有一个文件夹结构,如:

/ (project root)
|-- .git
|-- documentation
|-- software
|      |
|      |-- subfolder_1
|      |       |
|      |       |-- someLib
|      |       |-- someOtherLib
|      |       
|      |-- subfolder_2
|
|-- hardware

你看,只是一堆嵌套的文件夹, .git 文件夹位于项目的根目录中。

对于该项目,我需要开发一个库,我们称之为 someLib(上面“图片”中的 someLib 文件夹目前为空,因为我还没有开始使用该库)。

这个库可能会变得非常大。而且,更重要的是,它不包含与此特定项目相关的任何功能。我,或者甚至其他人,也可能在另一个项目中使用它。

所以,我认为让 lib 成为自己的项目是个好主意。然后,我可能会使用 git submodule 或 subtree 将库“链接”到我的项目中。

现在有什么问题?

好吧,当我将 lib 移动到它自己的项目中时,我将拥有其他文件。在主项目中开发 lib 很容易,但在它自己的项目中,我需要额外的测试代码、makefile、“main.c”和(因为它是嵌入式的)硬件驱动程序。没有这些额外的东西,我无法运行/测试 lib。

这看起来像:

/ (someLib root)
|-- .git
|-- documentation
|-- makefile
|-- main.c
|-- hardwareDriver_1
|-- hardwareDriver_2
|-- someLib
       |
       |-- someLib.c
       |-- someLib.h

如您所见,我不想在我的主项目中使用所有这些东西。

那么,当使用子模块或子树方法时,有没有办法将这些东西排除在主项目之外?

或者,更重要的是,你将如何解决这个问题?

我怀疑我是第一个面临这个问题的人。有什么好的提示吗?

4

2 回答 2

2

然后,我可能会使用 git submodule 或 subtree 将库“链接”到我的项目中。

与其使用子模块或子树,不如将这个库用作库呢?

您可以使用此子模块生成一个.so,并让您的主代码使用该包。然后两个项目(库和主文件)文件将完全解耦,从而解决您的问题。

于 2014-08-06T05:51:48.390 回答
0

我需要额外的测试代码、makefile、“main.c”

这听起来像另一个子模块,具有:

  • 用于开发该库的主要父存储库:
    • lib 源的子模块(也可以在您的第一个项目中导入)
    • lib 测试特定文件的子模块

该父存储库用于记录哪些版本的 lib 源代码与 lib 测试文件/代码的版本一起使用。

将测试代码与实际代码分开将有助于使 lib 项目更容易嵌入到其他项目中。

于 2014-08-06T05:47:24.513 回答