2009-09-05 102 views
9

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

我有我自己的小,但越来越多的代码,我想在各种项目中使用的集合。文件和文件夹的布局是这样的:

库\ SUB1 \ source.h

库\ SUB1 \ source.cpp

库\ SUB2 \ source.h

库\ SUB2 \ source.cpp

之一我的问题是,我想根据需要在我的其他项目中包含此代码。迄今为止,我使用绝对路径指向库文件的代码,但是必须有更好的方法。

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

所以我的问题总之是如何解决这个问题?处理上述情况的最佳方式是什么?

+1

为什么你想在其他项目中包含源代码?以这种临时方式使用几个项目中使用的源文件是疯狂的 - 你一定会对一个打破另一个项目的项目进行更改。它还消除了使用库的好处之一 - 你只需要lib和include文件 - 而不是源文件。 尝试更加严谨 - 这将节省时间,长期而且可能在短期内。使用版本库和版本控制系统(git,subversion或其他)。确保你正确的“版本”,并发布你的库的测试/交付版本。 – Dipstick 2009-09-05 12:59:01

+1

也许这应该是一个社区wiki问题?没有一个答案,但这更多的是关于源文件组织的讨论。 – 2009-09-05 14:11:34

回答

3

我不认为有一个正确的方式来做到这一点 - 这将取决于你正在努力实现的。

这里有一些事情你可能不知道的:

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

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

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

这给了你,你把包含文件,如果你把你的文件夹到Visual Studio的搜索规则,你不必包括所有的任何路径上多一点控制。

1

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

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

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

3

一般而言,您不应将来自库的源文件直接添加到其他项目。将它们分别编译为一个库并使用它们。

组织库的目录结构本身,现在我看中了类似如下结构

  • LIBRARY1/widget.h
  • LIBRARY1 /私营/ onlyinlib.h
  • LIBRARY1 /私营/ widget.cpp

(和如果适用的话)

  • LIBRARY1 /私营/资源/ widget.jpg
  • LIBRARY1 /私营/项目/ widget.xcode

我把所有头直接在库路径,并有一个子文件夹private其中将包含一切都只是图书馆使用,但不应共享/暴露。

最大的好处是,每一个项目,我开始只需要一个包含路径的目录包含我的图书馆指指点点,然后每隔(公众)包括:就像做

#include "library1/widget.h" 

私人包括仅仅

#include "onlyinlib.h" 

这有许多优点:

  • 如果新库介绍,没有搞乱项目/编译器设置来使头部可见。
  • 转移到其他编译器/平台也很麻烦。
  • 标题是自动“命名空间”,由包括路径太的一部分,即,它是几乎不可能得到nameclash与包括
  • 它立刻明显,其中一个标题从何而来,如果头是一部分公共接口或不
2

如果您必须包含第三方代码,而不是只是一个预编译的版本连接(例如,也许你需要修改或调整,以它),考虑分支它无论你用于源代码管理:

  • /主干/ ... --- 你的代码放在这里
  • /第三方---第三方库的原始拷贝到这里
    • /第三方/ LIB1
    • /第三方/ lib2
  • /主干/ LIB1 --- 地支: /第三方/ LIB1,或许与当地的变化
    • 这是你建立与/链接的版本。

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

例如,假设 “LIB1” 发布一个新的版本:

  • 提交更改到/第三方/ lib1内。
  • 合并 /第三方/ LIB1 /主干/ LIB1
  • 解决任何合并冲突。

这是国际海事组织唯一可以处理升级本地修改的第三方库的理智方式。