2010-01-07 58 views
2

假设您在单独的存储库或同一个存储库中的顶级目录中有多个定制的C++项目。也许10是库的项目,如图形,数据库,数学等的东西,2是使用这些库的实际应用程序。在几个C++项目的代码库中组织.libs

组织这两个应用程序项目以获得他们需要的.libs的最佳方式是什么?

  • 每个LIB项目构建的.lib在自己的目录,开发人员必须跨越手动复制这些到应用领域,并确保获得正确的版本
  • 应用项目预期的lib项目是在特定的路径和寻找的.libs
  • 常见的/ libs目录中所使用的所有项目
  • 别的东西

这是专注于C++,但我认为这是非常SI那些位置内与其他语言类似,例如在Java项目中组织JAR。

回答

1

我建议这种方法:

在根文件夹中组织您的代码。我们称之为代码。

现在将您的项目和库作为子文件夹(例如项目和库)。

像平常一样构建库,然后添加生成后步骤,将生成的头文件和.lib文件复制到一组共享文件夹中。例如,Libraries \ include和Libraries \ lib。使用子文件夹或命名约定(myLib.lib,myLib_d.lib)来区分不同的构建版本(例如调试版和发行版)是一个不错的主意,这样任何lib引用都明确地定位一个永远不会混淆的单个文件。当你不小心链接到一个lib的错误变体时它会很糟糕!

您也可以将您使用的第三方库复制到这些文件夹中。

注意:为了保持它们的有序性,请使用#include“Math \ Utils.h”而不是“Utils.h”包含文件。并将整个数学库的标题放入include \ Math,而不是全部放入include文件夹的根目录。这样你可以有很多没有名字冲突的库。它还可以让您拥有不同版本的库(例如Photoshop 7,Photoshop 8),它允许您在不同的运行时环境中多重定位您的代码。

然后设置您的项目引用以下两种方式之一的库:

1)告诉你的IDE /编译器,其中库是利用其全球的lib/include路径。这意味着您可以在每台PC上设置一次IDE,而不必指定任何项目的库位置。

2)或者,将每个项目设置为使用它自己的lib/include路径引用libs。这为您提供了更大的灵活性,避免了设置每台PC的需求,但意味着您必须在每个新项目中设置相同的路径。

(哪一个是最好取决于项目与开发PC的数量数)

而且最重要的部分:当你引用包括/库,使用相对路径。例如从Projects \ WebApp \ WebApp.proj中,使用“.. \ ..\ Libraries \ include“而不是”C:\ Code \ Libraries \ Include“,这样可以让其他开发者和buildserver在其他地方(D:\ MyWork代替C:\ Code)如果你找到一个开发人员在C:\上没有足够的磁盘空间,或者你想分支你的源代码控制,它会咬你一天。“

+0

*”当你引用includes/libs时,使用relative路径“* ......倾向于将'../../ Libraries/Include'放入项目中包含目录,而不是明确引用标头,这样可以避免在您决定移动包含时破坏代码 – 2010-01-07 22:27:54

+0

当AppX使用DatabaseUtils的HEAD版本,但是AppY不能在同一个项目的r1234之后的任何修订版本上工作吗?当我想将boost1.2.3和boost1.2.4作为单独的项目说出时,您的解决方案就可以正常工作 - 它们会像这样释放它们。通常是一个用户lity项目仍在开发中,新的更改会破坏旧应用程序的功能。 – 2010-01-07 22:35:37

+0

@gf:我的意思是说./../Libraries/Include在你的INCLUDE_PATH中,但是你的#include将使用不同库的子文件夹,即#include“Math \ Utils.h”。否则,你必须在一个文件夹中放置一百万个头文件,并且最终会产生许多带有名称冲突的文件(比如每个库中用于不同的东西的“types.h”) – 2010-01-08 07:48:54