我应该把第三方库放在哪里?

Posted

技术标签:

【中文标题】我应该把第三方库放在哪里?【英文标题】:Where should I put third-party libraries? 【发布时间】:2011-04-06 01:12:56 【问题描述】:

我为 decent-sized C++ project 贡献了许多依赖项。问题是,该项目包含其所有依赖项的来源(例如 pcre、zlib 等)。我想将项目缩减为与程序本身相关的内容。是否有一些相对标准的方法来编译这些库并将它们放在某个地方,并且它们的头文件也很容易访问?

不管怎样,我使用的是 Windows 7,并且正在使用 VS2005 进行开发。我也是一个在 Windows 上处理大型 C++ 项目的菜鸟;我从来没有真正需要走出标准库和 win32。

【问题讨论】:

此评论不会有太大帮助,因此我不会将其作为答案。 Linux/etc 对此有了更多的了解。有 src、lib、bin、include 和其他标准目录名称。当您在 Windows 下编写库时,您可以将库的标头、源代码等放在您想要放置的任何位置,并期望世界符合您的要求。您提到的一些库在 Linux 下可用,因此可能使用标准目录方案 嗯...这是一个很好的观点。我想编译的库放在 lib 和/或 bin 中(取决于 DLL/LIB-ness),而应用程序代码放在 src 中?我喜欢这样。 @Merlyn:我觉得有趣的是,Linux 有标准的位置来放置 C 库和包含文件,但没有标准的位置来存储 二进制文件。呸! +1 评论。 【参考方案1】:

我们在工作场所使用的一种结构是有一个“外部”文件夹,其中包含一个“包含”和一个用于标题和外部库的“Lib”文件夹。但是,由于我们也使用 VS,因此我们尝试尽可能多地使用其“依赖项”功能,从而消除对链接器的手动输入。这意味着只有不在同一解决方案下的项目才会进入“外部”文件夹。此外,由于我们有一些特定于某些项目的第三方库,因此我们在项目文件夹中为这些包含和库创建文件夹。它是这样得到的:

.\ |-Project1\ --> 包含 Project1.vcproj |-Project2\ --> 包含 Project2.vcproj | |-第三方\ | |-包括\ | |-库\ |-外部\ | |-包括\ | |-库\ |-InternalLibrary\ --> 包含 InternalLibrary.vcproj |-Solution.sln --> 包含 vcproj 并根据需要通过其依赖项链接它们

我不知道这是否是有史以来最好的结构,但一切都在源代码控制之下,我们可以通过构建解决方案进行夜间构建,而开发通过构建单个项目进行。

【讨论】:

【参考方案2】:

您的陈述中有一个谬误:“我想将项目精简到与程序本身相关的内容。”

相信我,依赖项与程序极为相关。如果您在源代码控制中没有这些,那么在引入新团队成员或切换到新工作站时,您将遇到无穷无尽的问题。

即使编译“不相关”的库,这些编译的库也应该进入您的源代码库。

【讨论】:

好吧...我应该说“特定于应用程序的代码”。不过,我明白你的意思。但是构建这个的最好方法是什么?现在,这一切都在一个项目中。我应该在一个解决方案下将其分解为单独的项目,还是有更好的方法?老实说,我不知道这里有哪些最佳做法,而且我在 Google 上找不到任何东西。 我不完全同意这一点。一个 Boost 安装,一旦编译了外部,大约是 5GB(如果你必须支持 VS2010 和 VS2008,则需要 10GB)。这在源代码控制下是不合理的。【参考方案3】:

我见过小组做以下事情:

将内部代码与外部代码分开(他们编写的代码与外部公司的代码) 将他们的代码与库代码分开 分离每个程序和每个库 签入其依赖项的编译版本,因此它不是其完整构建周期的一部分(至少在某些分支中不是。其他分支可能会进行更完整的构建)

每个 exe 或库都存在项目,位于 exe/library 所在的目录中。

解决方案存在于团队认为有益的任何地方,并且经常链接二进制文件,而不是他们的项目包含在子解决方案中。只有完整的构建才能保证在新入伍时不会中断。

告诫购买者...

【讨论】:

以上是关于我应该把第三方库放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Monodroid:我应该把配置设置放在哪里?

python第三方库安装到哪里

python第三方库安装到哪里

我会Python,且第三方系统有接口,我应该如何通过Python去调用第三方系统的接口,进行对接?

macbook第三方下载的软件都存哪?刚入手第一天,想知道它安装软件时是把软件放在哪里?

Android项目使用第三方库依赖树的查看方法