代码之家  ›  专栏  ›  技术社区  ›  FP.

将类重新组织为静态库

  •  1
  • FP.  · 技术社区  · 15 年前

    我将尝试重新组织我的团队构建一组共享大约90%源文件的大型应用程序的方式。现在,除了不在我们控制范围内的外部链接应用程序外,这些应用程序的构建没有涉及任何库。应用程序使用相同的公共源文件(我们不维护相同.h/.cpp文件的5个版本),但这些文件没有内置到任何公共库中。因此,目前,我们正在为每个应用程序反复构建相同的代码付出代价,每次我们打算发布一个版本。对我来说,这听起来像是使用库来捕获共享代码和减少构建时间的主要候选者。我没有使用dll的选项,所以方法是使用静态库。

    我想知道你对如何完成这项任务有什么建议。我在创建/组织静态库方面的经验有限,因此甚至对组织/gotchas的基本建议都是受欢迎的。甚至是一本好书的推荐书?

    我做了一个简短的练习,找到每个应用程序共享的文件的整个子集。作为概念的证明,我把这些文件放在一个单独的“公共怪物”静态库中。使用这个单一的静态库构建完整的应用程序当然会提高所有应用程序的构建时间,但是我应该把它留在这里吗?这种形式的库的目的不是很集中,似乎是模块化的一种懒惰尝试。这些应用程序正在开发中,我担心这个设置会在以后引起问题。

    2 回复  |  直到 15 年前
        1
  •  0
  •   anon    15 年前

    在这方面很难给出一般的指导方针——如何构造库在很大程度上取决于如何使用它们。如果我描述自己的代码库,这可能会有帮助:

    • 一个包含代码的通用库,我希望所有应用程序都至少有50/50的机会需要使用它。这包括字符串实用程序、正则表达式、表达式求值、XML解析和ODBC支持。可以想象,这应该被分割一点,但这使得在自由/开源项目中分发我的代码更容易保持它的整体性。

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

    • 一种通过其本机接口而不是通过odbc支持sqlite的方法。

    • 一个围绕MangoSeCWeb服务器的C++ Web服务器包装器。

    通用库用于我写的所有东西,其他的则用于更专业的环境。每个库的头都保存在单独的目录中,库二进制文件本身也保存在单独的目录中(尽管它们可能应该在一个lib目录中)。

        2
  •  0
  •   user52875    15 年前

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

    我注意到的另一件事(当然是在msvc上),如果构建速度是一个重要的考虑因素,您可以考虑:dll链接比静态库快得多。我认为这是因为它们不必被复制到新的可执行文件中,也不需要搜索消除未使用的代码。即使它不适合生产,你也可以在开发时使用这个技巧。

    我还习惯用cmake创建我的解决方案文件,因为比起在gui中点击一个没完没了的选项列表,更容易概述整个构建过程。你自己决定是否要走那条路。