gpt4 book ai didi

git - 如何使用 git、boost、

转载 作者:太空狗 更新时间:2023-10-29 13:03:42 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

6年前关闭。




Improve this question




在编程时,我会积累代码片段和实用程序类。我想存储这些以供将来实际使用。

简短的问题是什么是最好的方法来做到这一点。更详细的例子:

在编写代码时,我们会不断重用我们的好消息来涵盖常见任务。然而,为了使我们的项目开源,比如在 github 上使用 git,这些花絮也需要可用。我想知道如何最好地做到这一点。

  • 我是否将我的个人实用程序 repo 项目可以添加为 git 中的子模块?
  • 或者我是否为每个花絮制作单独的 git repos,以便项目可以添加特定花絮的特定版本作为子模块。 (这解决了诸如 boost 之类的实用程序库的问题,即使您的程序可能只需要它的一小部分,它也会变得很大)
  • 或者我是否将两者结合到一个带有子模块的实用程序仓库中,外部项目可以将实用程序仓库作为子模块?如果他们想使用 tidbit a 的 x 版本和 tidbit b 的 y 版本,会发生什么?只是有一个集中的概述会很好吗?

  • 像所有公共(public)代码一样,这样的代码片段应该是轻量级、快速、经过测试、可移植、文档化的,并且最好是相对独立的。现在我在某个地方找到了这个不错的代码,它使用了 CTASSERT,它是不可移植的。

    我该怎么办?
  • 我可以使用 boost static_assert,但这会增加一个小代码片段的主要依赖关系,因为 boost 不是微不足道的,而且在我的系统上它编译到大约 2GB。更糟糕的是,它还使用提供一些非常基本功能的代码段将这种依赖关系添加到每个项目中。此外,据我所知,boost 没有 git repo,因此项目无法通过子模块自动处理这种依赖关系。
  • 我是否制作了另一个片段并 pull 出我自己的编译时断言,其愚蠢的副作用是重新发明轮子并创建更多代码来做 boost 已经做的事情。

  • 我期待听到你如何解决这个问题,以及一般的想法和指导方针。

    最佳答案

    这似乎没有什么动画,但我仍然对此感到非常兴奋,并希望其他人提供意见。这就是我想出的:

    动机

    每个程序员都会积累一堆可重用的代码片段。然而,大多数情况下,这些片段最终会出现在项目的全局头文件中,然后从那里将它们复制/粘贴到新项目中。

    这有一些缺点。代码很笨拙,并且通过适当的单元测试和开发演进否认了它自己的生命。此外,这会导致类似或相同代码的多个副本在没有基础设施的情况下徘徊,无法同时维护它们。

    任何公开发布的代码还需要代码片段符合标准并经过全面测试。

    实现

    我发现可以使用 git 中的片段库创建一个很好的解决方案。我创建的所有 future 项目都可以将这个库作为一个子模块,而各个片段又是来自该 repo 的子模块。用户可以选择只下载他们使用的那些片段,同时享受所有的中央包含目录,以及对文档和单元测试的中央访问。

    我有一个 TidBits_Cpp 存储库。此存储库具有每个代码片段的子模块。

    主 repo 有一个包含目录,就像 boost 一样,除了中央目录中的包含只包含子目录中的其他文件,并且每个花絮只有一个,如果你想使用那个花絮,你需要一个包含。它们将子目录包含在命名空间花絮中。将命名空间保留在子模块之外允许其他人将这些代码片段包含在他们自己的代码片段库中,并在它们周围添加自己的命名空间。

    每个带有片段的子模块主要具有仅 header 实现,带有用于单元测试的 header 和独立的单元测试应用程序。

    单元测试基类也是一个 TidBit。主仓库有一个单元测试应用程序,用于测试系统上存在的所有 TidBits。为此,它有一个包含虚拟包含的目录,该目录应该位于包含路径的最后,因此您始终可以编译。检查定义可以知道哪些代码实际上可用于单元测试。

    子模块中的所有代码都假定中央包含目录位于包含路径中。

    存储库中包含 DoxyFiles 以及 Visual Studio 解决方案。 Eclipse 更难处理,因为它不能很好地处理使用来自不同目录的 cpp 文件的项目。稍后我将为其他编译器和平台添加 MakeFiles。

    为了充分发挥这个功能,任何想要使用 TidBit 的项目都应该包含一个指向主要 TidBits_Cpp 存储库的子模块,然后 pull 他们想要使用的子模块。他们可以立即运行所有单元测试,而无需编写任何代码,然后就开始编码。

    父 repo 的开销很小,因为它只包含一行包含以及 1 个文件夹,其中包含一些单元测试内容和一个 DoxyFile。

    这种系统的美妙之处在于,片段 repo 甚至不需要我自己的。我可以调用任何 github 存储库作为子模块,其他也可以

    考虑到静态断言,好吧,我确实提取了自己的断言,尽管这里有可用的解决方案,而无需添加 boost 作为代码片段的依赖项。我不这样做的主要原因是因为 boost 很大并且它不能作为 git 存储库使用,所以它不能作为子模块自动下载。

    但是,作为 Georg Fritzsche指出here可以使用 bpc 从 boost 中提取一部分。缺点是例如对于静态断言,这仍然意味着 70 个文件......

    如果你有兴趣,这里是the link to my repository ,但目前仅将其视为这篇文章的说明。目前那里的代码仍处于开发阶段,还不适合公开发布。也没有文档等。所有这些都是为了将​​来的时间。

    关于git - 如何使用 git、boost、,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099374/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com