C++ 库依赖关系C++;项目

C++ 库依赖关系C++;项目,c++,c,include,project,static-libraries,C++,C,Include,Project,Static Libraries,我已经为此挣扎了很长一段时间,现在我真的需要弄清楚这一点。问题很简单。我有一个库L,它依赖于另一个库D,然后我想将库L用于我的项目。问题是,当我包含L的头时,我会(自然地)得到错误“无法打开属于D的包含文件” 如果我正在编写一个需要使用L的项目,我不想关心它的依赖性。一个实际的例子是包装多个图形API的“渲染框架”。用户不希望为正确的操作系统包含正确的头,因为这是库的职责 我真的希望我把自己说清楚,如果这个问题已经得到了回答(我打赌是的),你能给我一些关键字来搜索吗 感谢您花时间愉快地编写代码:

我已经为此挣扎了很长一段时间,现在我真的需要弄清楚这一点。问题很简单。我有一个库
L
,它依赖于另一个库
D
,然后我想将库
L
用于我的项目。问题是,当我包含L的头时,我会(自然地)得到错误“无法打开属于
D
的包含文件”

如果我正在编写一个需要使用
L
的项目,我不想关心它的依赖性。一个实际的例子是包装多个图形API的“渲染框架”。用户不希望为正确的操作系统包含正确的头,因为这是库的职责

我真的希望我把自己说清楚,如果这个问题已经得到了回答(我打赌是的),你能给我一些关键字来搜索吗


感谢您花时间愉快地编写代码:)

静态链接到您的“渲染框架”,我建议您阅读IMB帮助:

当您将
L
构建为静态库时,您可以在可执行文件中“包含”它。因此,您不必再关心
L
在哪里了。这有一些缺点,例如:如果您想更改属于
L
的子代码段,则必须重新编译所有“渲染框架”

他说:

实现一个顶级库
L
。使用一些静态库(例如
D
)。并将
D
中的所有
*.h
文件包含在您希望用户使用的文件中

Boost库使用这种模式来组织代码

[一] 如果我有一个使用渲染框架的示例应用程序,我不想手动包括Direct3D或OpenGl[…]


如果渲染框架安装正确,则其依赖项(如OpenGL)也必须正确安装。在这种情况下,框架的头文件应该在依赖项预期的位置找到它们的头文件。

对不起!无论哪种方式,你都不能只是“不想关心它的依赖关系”。要解析包含路径依赖项,例如GCC的
-I
选项;要解析库路径依赖项,链接器有
-L
选项。如果L的头需要D的头,则需要D的头使用L.句点。故事结束了。你能修改L库吗?如果是这样,就有可能使L的头不依赖于Ds头…@πάνταῥεῖ 如果他能,而我们都错了怎么办-我不明白为什么要贬低我。。我只是想理解为什么当我链接到SFML(例如)时,我不必将OpenAL添加到我的附加include目录中。对不起,如果我没有正确地解释自己,如果我完全误解了你的回答,请再次道歉,也许我没有理解:(问题的关键是:如果我有一个使用渲染框架的示例应用程序,我不想手动包括Direct3D或OpenGl,我希望框架能够做到这一点,框架将负责通过#pragma注释与库进行链接。这是一种糟糕的方法吗?嗯,我不喜欢引用源代码的链接。)除此之外,除非这些内容指向一些“官方”标准出版物。即使如此,我还是希望看到它们在这里被引用。好的,我明白你的意思,但如果我在“L”中包含“d”的标题,然后在我的示例应用程序中包含“L”,我会得到错误(自然?)从“d”中缺少标题.有什么办法可以避免吗?我确实正确地包含了“L”中的标题