对外部库的编译器依赖路径的组织

Posted

技术标签:

【中文标题】对外部库的编译器依赖路径的组织【英文标题】:Organisation of compiler dependency paths to external libraries 【发布时间】:2010-09-15 10:41:25 【问题描述】:

在我目前的团队中,我们在项目设置中组织对外部库标头的依赖项,如下所示:

编译器设置->其他包括: d:\src\lib\boost_1_43 d:\src\lib\CxImage_6_00 ...

如您所见,我们在路径中包含确切的库版本号。

此方法的advantage 是我们始终知道当前项目中使用的库的确切版本。由于项目设置存储在我们的存储库中,我们还拥有这些设置的完整历史记录。如果有版本更改,负责的开发人员必须更改项目设置并确保新版本没有问题。

我看到的最大的disadvantage 是,对于库的每个新版本,我们都必须触及使用它的每个项目,并更改路径。 (我们不想在我们的主要产品中部署一个库的多个版本)。而且我可以说,你不会通过这个重复的过程结交很多朋友......

您如何在中型项目中处理此问题?您的经验中是否有“最佳实践”?

我对具有大量子项目的 windows/visual studio 2008 环境中的任何解决方案特别感兴趣。

感谢您的建议!

【问题讨论】:

【参考方案1】:

您可以使用property sheets 轻松管理常用项目属性。

我的建议是设置这样组织的用户宏:

$(DependenciesPath)   => d:\src\lib\
$(BoostPath)          => $(DependenciesPath)boost_1_43\
$(CxImagePath)        => $(DependenciesPath)CxImage_6_00\

然后,在您的项目属性中,您只需要引用$(BoostPath)$(CxImagePath) 而不是特定版本。您可以移动整个依赖项文件夹,并且只需更改属性表中的各种宏即可更改各个依赖项路径。

【讨论】:

我使用的是 Visual Studio 2008。该版本或同等版本中是否有属性表? @nabulke:是的。在链接的 MSDN 页面上,选择顶部的“其他版本”并选择“Visual Studio 2008”。随着 C++ 项目从 VCBuild 迁移到 MSBuild,Visual Studio 2010 中属性表的实现发生了显着变化,但它们在 Visual Studio 2008 中得到支持。 詹姆斯,感谢您的回答。我一定会仔细看看那些属性表!

以上是关于对外部库的编译器依赖路径的组织的主要内容,如果未能解决你的问题,请参考以下文章

Bazel - 如何处理外部 .so 库的传递依赖关系?

CMake 包含路径 - 依赖于外部库的库

LNK2001: 无法解析的外部符号的几种情况

C++ 编译器标志忽略外部库的警告但不包括目录

使用外部 Java 库的猪 UDF

如何交叉编译 动态库