Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个C++;项目 我们假设您在同一个存储库中的单独的存储库或顶级目录中有几个定制的C++项目。可能10个是图形、数据库、数学等方面的库项目,2个是使用这些库的实际应用程序_C++ - Fatal编程技术网

在多个C++;项目 我们假设您在同一个存储库中的单独的存储库或顶级目录中有几个定制的C++项目。可能10个是图形、数据库、数学等方面的库项目,2个是使用这些库的实际应用程序

在多个C++;项目 我们假设您在同一个存储库中的单独的存储库或顶级目录中有几个定制的C++项目。可能10个是图形、数据库、数学等方面的库项目,2个是使用这些库的实际应用程序,c++,C++,组织这两个应用程序项目以获得所需的.libs的最佳方式是什么 每个lib项目都在自己的目录中构建.lib,开发人员必须手动将其复制到应用程序区域,并确保获得正确的版本 应用程序项目希望lib项目位于特定路径中,并在这些位置中查找.lib 所有项目都使用公共/libs目录 别的 这是集中在C++上,但我认为它与其他语言非常相似,例如在java项目中组织JAR。 < P>我建议这种方法: 在根文件夹中组织代码。让我们称之为代码 现在将项目和库作为子文件夹(例如项目和库) 按正常方式构建库,并添加

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

  • 每个lib项目都在自己的目录中构建.lib,开发人员必须手动将其复制到应用程序区域,并确保获得正确的版本
  • 应用程序项目希望lib项目位于特定路径中,并在这些位置中查找.lib
  • 所有项目都使用公共/libs目录
  • 别的

这是集中在C++上,但我认为它与其他语言非常相似,例如在java项目中组织JAR。

< P>我建议这种方法:

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

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

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

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

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

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

1) 告诉IDE/编译器lib使用其全局lib/包含路径的位置。这意味着您可以在每台PC上设置一次IDE,而不必为任何项目指定LIB的位置

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

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


最重要的是:引用includes/libs时,使用相对路径。e、 g.在Projects\WebApp\WebApp.proj中,使用“.\..\Libraries\include”而不是“C:\Code\Libraries\include”。这将允许其他开发人员和您的buildserver将源代码放在其他地方(D:\MyWork而不是C:\code),以方便使用。如果你不这样做,有一天当你发现C:\上没有足够磁盘空间的开发人员,或者如果你想分支你的源代码管理时,它会咬你一口。

“当你引用includes/libs时,使用相对路径”。。。宁愿将
。/../Libraries/Include
放入项目包含目录,而不是显式引用标题。如果您决定移动包含项,这可以避免破坏代码。如果AppX使用DatabaseUtils的头版本,但AppY不支持同一项目r1234之后的任何修订,会发生什么情况?当我想将boost1.2.3和boost1.2.4作为单独的项目时,您的解决方案可以正常工作——它们就是这样发布的。但通常一个实用程序项目仍在开发中,新的更改会破坏旧应用程序的功能。@gf:我的意思是,/../Libraries/Include在Include_路径中,但你的#Include将使用不同lib的子文件夹,即#Include“Math\Utils.h”。否则,你必须在一个文件夹中放入一百万个标题,最终你会得到许多名称冲突的文件(比如每个库中使用“types.h”来处理不同的事情)@John:使用库时,使用单元测试来确保你不会引入回归。此外,尽可能避免使用两个或多个内部版本的库—只要让所有项目都在samed版本上工作,您就会省去很多麻烦。如果您必须使用不同的版本,那么在源代码管理中分支您的代码——这就是它的用途。(请记住,您不控制boost的版本,但您可以控制自己的库)