C++ 库组织

标签 c++ cmake static-libraries organization

<分区>

我正在构建一个非常基础的库,这是我计划发布供其他人使用(如果他们愿意)的第一个项目。因此,我想知道就组织而言有哪些“最佳实践”。我的项目唯一可能独特的是,为了在项目中使用它,用户需要扩展某些抽象类,这引出了我的第一个问题:

  • 我见过的很多库都由一个 .a 文件和一个 .h 文件组成。这是最佳做法吗?公开所有公共(public) .h 文件以便用户可以选择包含哪些文件不是更好吗?如果这是首选的做事方式,它究竟是如何实现的?那个 .h 文件中包含什么?

我的第二个问题涉及依赖关系。例如,我当前的项目依赖于 OpenGL、GLFW 和 GLEW。 我应该以某种方式将它们打包到我的项目中,还是让用户负责确保安装它们?

编辑:有人询问我的目标操作系统。我所有的依赖项都是跨平台的,所以我(也许天真地)希望让我的库也跨平台。

感谢所有帮助!

最佳答案

这要视情况而定。如果您有一些相当复杂的功能,它们在许多密切相关的功能中,那么一个标题是正确的解决方案。

例如你写了一组在屏幕上画东西的函数,你需要一些函数来配置/设置环境,一些函数来定义和放置场景中的对象,一些函数来做实际的绘图/处理,最后拆解,然后使用一个头文件是一个很好的计划。

在上述情况下,也可能有一个包含多个较小头文件的“整体”头文件。特别是如果您有相当大的类,将它们全部放在一个文件中会变得相当困惑。

另一方面,如果您有一组函数处理溶解在液体中的气体,另一组函数用于计算钢梁的强度/承载能力,另一组函数用于计算钢梁的摩擦力橡胶轮胎靠在路面上,那么它们可能应该有不同的标题 - 即使进入“物理/力学库”是所有可行的功能。

在您的库中提供第三方库很少是个好主意 - 是的,如果您想提供两种下载,一种是“所有你需要的,只需加水”,另一种是“裸库”,那很好.但我不想花三倍的时间来下载你的库,因为它还包含你的代码正在使用的其他三个库,它们已经在我的机器上了。但是,请记录需要哪些库,以及在支持的平台上安装它们需要做什么(以及支持的平台是什么)。以及您测试过哪些版本的库 - 没有什么比“获取最新版本”更糟糕的了,却发现某些东西需要的版本倒退了两步......

(正如 Jason C 指出的那样,一旦您的代码依赖于几个不同的包,许可就会变得非常困惑,因为您的许可必须与所有其他许可兼容——有时这甚至是不可能的…… )

关于C++ 库组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046009/

相关文章:

C++ ofstream : evaluate close() error

C++:在方法中创建对象并在方法外使用它

c++ - sscanf() 以换行符作为分隔符

CMake:从多行文本文件获取版本

opencv - 在 Win7 32 位上使用代码块 10.05 构建 opencv2.4.2(使用 cmake 2.8.9)时出错。

ios - 具有共享依赖项的多个静态库 - iOS

c++ - 丰富的数字测试

windows - 如何在 Windows 的 CMake 中将多个静态库捆绑到单个库中

c - 防止 Visual Studio 导出静态库中的函数

c++ - 在 AIX 上使用 pthread 进行静态链接