gpt4 book ai didi

c++ - 首选位置相对或包含路径路径相对包含在您自己的 C++ 库中

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:55 30 4
gpt4 key购买 nike

每当我开始用 C++ 开发一个新的共享库时,我都会遇到同样的问题:

我应该使用相对于当前文件位置的 include 还是相对于(潜在的)include 路径 ( -I ) 来引用我项目中的其他头文件,即同一个库?

我检查了我系统上安装的一些库头文件。

  • boost似乎使用相对于包含路径和 <> 的包含括号包括其他升压头,即 #include <boost/move/move.hpp>
  • poppler另一方面似乎使用了一些奇怪的相对路径 "" ,有时相对于当前位置,有时相对于其基地(我什至不知道这行得通),例如在 fofi/FoFiEncodings.h有一个#include "goo/gtypes.h"其中 fofigoo是同一级别的目录
  • 许多其他人只是简单地包含带有 "" 的文件以及它们的位置相对路径,主要是同目录下的文件

它是否取决于共享库本身的目录结构(即它的复杂性),即位置相对路径适用于简单的布局但有更多交叉引用的缺点,如 boost ?是否有任何技术原因或陷阱导致一个可能工作而另一个不工作(可移植性、依赖于编译器的行为,...)?

最佳答案

Boost 使用括号而不是引号。这意味着它不是绝对路径,而是相对于提供给编译器的 linclude 目录列表开始搜索。所以它是相对路径的变体。

真正的绝对路径不是一个好主意,因为如果另一个开发人员在另一个位置安装源代码,他/她将无法编译,除非他/她更改源中的所有头文件引用。

编辑:

如果您开发的库足够通用并且设计为在多个(可能不相关的)项目之间共享,则括号选项应该是首选选项。这使您可以自由地在任何地方安装库,也可以非常轻松地切换库(不同项目的不同版本)。

如果您在更大解决方案的上下文中开发更具体的库,主要是为了隔离可重用代码,则引用的相对路径是一个选项。如果稍后您想在另一个上下文中重用该库,则必须将其源代码安装在新的解决方案目录中,以便相对路径仍然有效。所以用例有点不同(在非常具体的项目的上下文中进行窄共享和偶尔重用)。

关于c++ - 首选位置相对或包含路径路径相对包含在您自己的 C++ 库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48163892/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com