共享库的C++头文件,要安装哪些头?(最佳实践)

C++ Header files for shared library, which headers to install? (best practice)

本文关键字:最佳 安装 C++ 文件 共享      更新时间:2023-10-16

创建共享C++库时,安装头文件的最佳做法是什么?更具体地说,我有以下两个问题:

  1. 我正在处理一个共享库项目,该项目的标头具有复杂的相互依赖性,所以我是简单地全部安装它们,还是有办法限制所需的标头数量?

  2. 我计划将头安装到/usr/local/include的子目录中,以避免污染顶级目录,这样做正确吗?

其他信息:我只是真的想提供一个图书馆的接口。该项目是一个自动工具项目,我在Makefile.am文件中使用pkginclude_HEADERS命令将头安装在相应的子目录中。实际上,我正在将这个项目从一个使用静态库的程序转换为一个共享库和链接到库的小程序。人们不太可能只使用图书馆的一小部分,而不是整个图书馆。

编辑:

作为对以意见为基础的投票的回应,我也会考虑一个有效的答案,即这纯粹是针对项目的,或者说是根据口味,并且没有公认的最佳实践,但我怀疑情况是否如此,或者我不会问。

一种常见的方法是将公共头文件放在include目录中,将其余源文件(hpp和cpp)放在src目录中。例如,假设您正在处理一个名为foo的项目。一个可能的文件层次结构如下:

foo
    include
        foo
            x.hpp
            y.hpp
    src
        x.cpp
        y.cpp
        z.cpp
        z.hpp

在这种情况下,您可以简单地将include目录添加到include路径中,然后您就可以包含这样的公共头文件:#include <foo/x.hpp>

我想分享我的想法,但我不确定我是否有正确的答案:)。

A:

  1. 如果标头具有复杂的相互依赖关系,那么简单地将它们全部安装会更安全。或者您可能想要读取源代码并清除相互依赖关系
  2. 把所有的标题放在一个自由裁量的标题中是正确的。:)