繁体   English   中英

将类重组为静态库

[英]Reorganize Classes into Static Libraries

我将尝试重新组织小组构建共享大约90%源文件的大型应用程序的方式。 目前,这些应用程序的构建不需要任何库,除了不受我们控制的外部链接库外。 这些应用程序使用相同的公共源文件(我们不维护同一.h / .cpp文件的5个版本),但是这些文件未内置在任何公共库中。 因此,目前,每次打算发布版本时,我们都要为每个应用程序一遍又一遍地构建相同的代码。 对我来说,这听起来像是使用库捕获共享代码并减少构建时间的主要候选人。 我没有使用DLL的选项,因此方法是使用静态库。

我想知道您对如何完成此任务有什么建议。 我在创建/组织静态库方面经验有限,因此,即使对组织/陷阱的基本建议也很受欢迎。 甚至还可以推荐一本好书吗?

通过查找每个应用程序共同共享的文件的整个子集,我做了一个简短的练习。 作为概念验证,我将这些文件放入了一个“ Common Monster”静态库中。 使用此单个静态库构建完整的应用程序当然可以改善所有应用程序的构建时间,但是我应该保留它吗? 这种形式的库的目的不是很集中,似乎是对模块性的懒惰尝试。 这些应用程序正在开发中,恐怕此设置会进一步引发问题。

在这方面很难提供一般性的指导方针-库的结构很大程度上取决于您的使用方式。 也许如果我描述自己的代码库,这可能会有所帮助:

  • 一个包含代码的通用库,我希望所有应用程序至少有50/50的使用机会。 这包括字符串实用程序,正则表达式,表达式求值,XML解析和ODBC支持。 可以想象,应该对此进行一些拆分,但是这使得在FOSS项目中分发我的代码更容易保持整体。

  • 一个支持多线程的库,为线程,互斥量,信号量等提供包装。

  • 一种通过其本机接口而不是通过ODBC支持SQLite。

  • 一个C ++ Web服务器包装程序围绕着Mongoose C Web服务器。

我编写的所有内容都使用通用库,其他情况下则使用更专业的库。 每个库的标头和库二进制文件本身都保存在单独的目录中(尽管它们可能应该在单个lib目录中)。

确保库的依赖项形成无环有向图(树)。 虽然这对于静态库不一定是一个问题(实际上我不确定),但是如果您决定切换到dll,那将是一个问题。 根据您的情况,这可能需要重新设计接口。

我注意到的另一件事(肯定是在MSVC上),如果构建速度是一个重要问题,您可能会考虑:DLL的链接比静态库快得多。 我认为这是因为不必将其复制到新的可执行文件中,也无需搜索消除未使用的代码。 即使无法进行生产,也可以在开发时使用此技巧。

我也有使用CMake创建解决方案文件的习惯,因为与单击GUI中无休止的选项列表相比,概述整个构建过程要容易得多。 由您决定是否要走那条路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM