【问题标题】:Source file organisation源文件组织
【发布时间】:2010-11-25 20:56:35
【问题描述】:

我在组织源文件时遇到了一些麻烦。

我有自己的小但不断增长的代码集合,我想在各种项目中使用它们。文件和文件夹布局是这样的:

库\sub1\source.h

库\sub1\source.cpp

库\sub2\source.h

库\sub2\source.cpp

我的一个问题是我想根据需要将此代码包含在我的其他项目中。到目前为止,我一直使用绝对路径来指向库代码,但一定有更好的方法。

此外,我需要将我使用的每个库文件添加到项目的文件 Visual Studio 中,以便正确编译。

简而言之,我的问题是如何解决这个问题?处理上述情况的正确/最佳方法是什么。

【问题讨论】:

  • 为什么要在其他项目中包含源代码?以这种特别的方式使用在多个项目中使用的源文件是疯狂的——你必须为一个项目做出改变而破坏另一个项目。而且它还消除了使用库的好处之一——你只需要 lib 和包含文件——而不是源代码。尝试更加自律——从长远来看,可能会在短期内节省时间。使用存储库和版本控制系统(git、subversion 或其他)。确保您正确地“版本”并发布经过测试/交付的库版本。
  • 也许这应该是一个社区 wiki 问题?没有一个答案,但这更多是关于源文件组织的讨论。

标签: c++ path include


【解决方案1】:

如果您必须包含第三方代码,而不仅仅是链接到预编译版本(例如,您可能需要对其进行修改或调整),请考虑将其分支到您使用的任何地方对于源代码控制:

  • /trunk/... --- 你的代码放在这里
  • /thirdparty --- 第三方库的原始副本到这里
    • /第三方/lib1
    • /第三方/lib2
  • /trunk/lib1 --- 分支自: /thirdparty/lib1,可能有本地更改
    • 这是您构建/链接的版本。

假设您使用一个不错的源代码控制系统,该方案将允许您轻松升级到第三方库的较新版本,然后将这些更改与您在本地所做的更改合并。

例如,假设“lib1”发布了一个新版本:

  • 将更改提交到 /thirdparty/lib1。
  • 合并 /thirdparty/lib1 /trunk/lib1
  • 修复所有合并冲突。

IMO,这是处理升级已进行本地修改的第三方库的唯一明智的方法。

【讨论】:

    【解决方案2】:

    一般来说,您不应该将库中的源文件直接添加到其他项目中。将它们单独编译为库并使用它们。

    为了组织库的目录结构本身,我现在选择了类似以下结构的东西

    • library1/widget.h
    • library1/private/onlyinlib.h
    • library1/private/widget.cpp

    (如果适用)

    • library1/private/resources/widget.jpg
    • library1/private/project/widget.xcode

    我将所有标题直接放在库路径中,并有一个子文件夹private,其中将包含仅由库使用但绝不应该共享/公开的所有内容。

    最大的好处是我开始的每个项目只需要一个指向包含我的库的目录的包含路径,然后每个(公共)包含都像

    #include "library1/widget.h"
    

    私人包含很简单

    #include "onlyinlib.h"
    

    这有很多优点:

    • 如果引入了新的库,则项目/编译器设置不会弄乱以使标题“可见”。
    • 迁移到其他编译器/平台也非常简单。
    • 标头会自动“命名空间”,即通过包含部分路径,几乎不可能与包含的名称冲突
    • 标头来自何处,以及标头是否是公共接口的一部分,一目了然

    【讨论】:

      【解决方案3】:

      首先:将所有使用的目录添加到项目的包含路径中。如果可能,将它们添加为相对路径。

      第二:您必须将所有使用的库/源文件添加到您的项目中。这可以在项目浏览器中完成,也可以在 Project->Linker 选项卡中完成。在后一种情况下,您还必须将使用的目录添加到项目库路径中。

      在#include 指令中使用路径通常不是一个好主意。

      【讨论】:

        【解决方案4】:

        我认为没有正确的方法可以做到这一点 - 这完全取决于你想要达到的目标。

        以下是您可能不知道的一些事情:

        • 您可以在项目中使用相对路径。

        • 您可以在路径中使用环境变量。

        • 您可以将目录添加到 Visual Studio 的搜索规则中。

        这使您可以更好地控制包含文件的放置位置,并且如果您将文件夹添加到 Visual Studio 的搜索规则中,则根本不必包含任何路径。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          • 2011-01-16
          • 2011-05-09
          相关资源
          最近更新 更多