/usr/local/lib 中的子文件夹?

Subfolders in /usr/local/lib?

我正在使用 Cmake 为我的大学开发一个简单的 C 共享库。 目前我正在开发我的 *.so 和我的 .*h 文件的安装程序。

当用户运行著名的sudo make install时,so和header文件应该放在哪里? 据我了解:

  1. 我不应该将它们放在 /usr/lib/usr/include 中,因为这些文件夹是为分发包保留的;
  2. 我不应该将它们放在 /lib/include 中,因为这些文件夹是为 OS 启动包保留的;

剩下 usr/local/lib/usr/local/include。但是我无法决定是否应该将我的文件放在子文件夹中:

  1. 将文件直接放入 usr/local/lib/usr/local/include 将使它们直接在系统中可用,但它们将与文件夹中的所有其他文件保持杂乱无章。更令人不安的事实是,如果有人安装另一个与我同名的 header 共享库,可能会发生未知行为;
  2. 将文件放在子文件夹中(/usr/local/lib/myAwesomeProject//usr/local/include/myAwesomeProject)将避免上述行为,但会阻止系统自动检测我的库(根据我的理解,系统会自动查找include 和 library 仅在特定目录 non-recursively): 所以如果系统查看 /usr/local/include,我的 includes 将不会因为子文件夹而被找到!

为了帮助你,这是我的系统:

感谢您的回复!

  1. 库和 headers 位置的方法可能不同:您应该将 库直接 放入 /usr/local/lib (否则链接器将无法找到它们)但是可以将 headers 放在 /usr/local/include 的子文件夹 下(因此它们不会与其他库的 headers 混合)。
  2. 问题本身是opinion-based,因为没有关于安装位置的通用规则。作为一种简单但广泛使用的方法,您可以使用 GNUInstallDirs CMake 模块的安装目录。

–齐瓦列夫