目前,我正在开发一个嵌入式项目。目前,我只有一个本地git存储库,因为我是唯一的开发人员。但是,我正在考虑将其作为OpenSource并将其移至github(如果达到某种程度的功能:-))。 所以,我正在考虑建立一个好的项目结构,所以其他开发人员可以加入。
嗯,目前,该项目设置非常简单。
我有一个文件夹结构,如:
/ (project root)
|-- .git
|-- documentation
|-- software
| |
| |-- subfolder_1
| | |
| | |-- someLib
| | |-- someOtherLib
| |
| |-- subfolder_2
|
|-- hardware
你看,只是一堆嵌套文件夹,项目根目录下有.git文件夹。
对于项目,我需要开发一个库,让我们称之为someLib(目前上面“图片”中的someLib文件夹是空的,因为我还没有开始使用lib。)
这个lib可能会变得非常大。而且,更重要的是,它不包含与此特定项目相关的任何功能。我,或者甚至是其他人,也可以在另一个项目中使用它。
所以,我认为将lib作为自己的项目是一个好主意。 然后,我可能会使用git子模块或子树将lib“链接”到我的项目中。
现在有什么问题?
好吧,当我将lib移动到自己的项目中时,我将有其他文件。在主项目中开发lib很容易,但在自己的项目中,我需要额外的testcode,makefile,“main.c”和(因为它是嵌入式的)硬件驱动程序。如果没有这些额外的东西,我就无法运行/测试lib。
这看起来像是:
/ (someLib root)
|-- .git
|-- documentation
|-- makefile
|-- main.c
|-- hardwareDriver_1
|-- hardwareDriver_2
|-- someLib
|
|-- someLib.c
|-- someLib.h
如您所见,我不想在我的主项目中使用所有这些东西。
因此,在使用子模块或子树方法时,有没有办法将这些东西排除在主项目之外?
或者,更重要的是,你会如何解决这个问题?
我怀疑我是第一个面临这个问题的人。有什么好的提示吗?
答案 0 :(得分:2)
然后,我可能会使用git子模块或子树将lib“链接”到我的项目中。
不是使用子模块或子树,而是将此库用作库?
您可以使用此子模块生成.so
,并让您的主代码使用该包。然后,两个项目(库和主要文件)将完全解耦,从而解决您的问题。
答案 1 :(得分:0)
我需要额外的testcode,makefile,“main.c”
听起来像另一个子模块,有:
那个父repo用于记录lib源的哪个版本与lib测试文件/代码的版本一起使用。
将测试代码与实际代码分开将有助于使lib项目更容易嵌入到其他项目中。