我有一个直接的C项目,它使用单个顶级makefile和对模块的递归调用将几个不同的相互关联的模块构建到单个映像中。这一切都很好,虽然我知道它没有使用最好的结构。我现在需要重新构建它,因为项目有一些变化,我想“正确”。另外,我发现我在模块中使用了一些常用代码,现在只是复制到每个模块中,所以我也想修复它。
更复杂的是我正在使用Subversion,并且正在使用的公共代码存储在项目的单独repo中,所以我不能只导入使用过的每个文件。
这是我认为我想要使用的结构,但我不完全确定如何编写makefile以实际使用它(但如果需要,我可以在另一个问题中处理它。)
build
+ common
| + lib1
| + lib2
+ module1
| + obj
+ module2
| + obj
+ module3
| + obj
+ output
Common将是另一个repo中具有公共源文件的文件夹的外部,并且每个模块中的makefile将在本地构建中间对象文件(这是必需的,因为每个模块编译方式不同,因此公共文件不是常见二进制文件)然后将其最终二进制文件放在共享输出目录中,以便将顶级makefile组合成单个最终图像。
答案 0 :(得分:0)
首先,这些设计问题中的一些是品味和习惯问题,关于它们的争论可能会接近宗教战争。
其次,您的common
目录命名不佳,因为它专门用作来自其他存储库的代码存储(这是一件好事),而不是作为多个模块共享的所有源的地方(不同的好事)。因此,我建议您添加另一个目录,例如build/headers/
,用于多个模块共有的标头,但存储在您自己的存储库中。