假设您在同一存储库中的单独存储库或顶级目录中有几个定制的C ++项目。也许10个是图形项目,如图形,数据库,数学等,2个是使用这些库的实际应用程序。
组织这两个应用程序项目以获得所需的.libs的最佳方法是什么?
这主要关注C ++,但我认为它与其他语言非常相似,例如在Java项目中组织JAR。
答案 0 :(得分:1)
我建议采用这种方法:
在根文件夹中组织代码。我们称之为代码。
现在将您的项目和库作为子文件夹(例如项目和库)。
正常构建库并添加一个构建后步骤,将生成的标头和.lib文件复制到一组共享文件夹中。例如,Libraries \ include和Libraries \ lib。最好使用子文件夹或命名约定(myLib.lib,myLib_d.lib)来区分不同的构建(例如调试和发布),以便任何lib引用显式地针对永远不会混淆的单个文件。当你不小心链接到一个错误的lib变种时,它会很糟糕!
您也可以将您使用的第三方库复制到这些文件夹中。
注意:为了使它们井井有条,请使用#include“Math \ Utils.h”而不是“Utils.h”包含文件。并将整个Math库的标题放入include \ Math,而不是将它们全部放在include文件夹的根目录中。这样你就可以拥有许多没有名字冲突的库。它还允许您使用不同版本的库(例如Photoshop 7,Photoshop 8),它允许您在不同的运行时环境中对您的代码进行多目标定位。
然后设置项目以两种方式之一引用库:
1)告诉您的IDE /编译器lib正在使用其全局lib / include路径。这意味着您可以在每台PC上设置一次IDE,而无需为任何项目指定库的位置。
2)或者,设置每个项目以使用自己的lib / include路径引用lib。这为您提供了更大的灵活性,并且无需设置每台PC,但意味着您必须在每个新项目中设置相同的路径。
(最好取决于项目数量与开发者PC数量)
最重要的部分:当您引用includes / libs时,请使用 relative 路径。例如从Projects \ WebApp \ WebApp.proj,使用“.. \ .. \ Libraries \ include”而不是“C:\ Code \ Libraries \ Include”。为方便起见,这将允许其他开发人员和您的构建服务器将源代码放在别处(D:\ MyWork而不是C:\ Code)。如果你不这样做,有一天当你发现开发人员在C:\上没有足够的磁盘空间时,或者如果你想分支你的源代码控制时,它会咬你。