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

Kol*_*dar 5 c cmake shared-libraries

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

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

  1. 我不应该把它们放进去/usr/lib/usr/include因为这些文件夹是为分发包保留的;
  2. 我不应该把它们放进去/lib/include因为这些文件夹是为操作系统启动包保留的;

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

  1. 将文件直接放在里面usr/local/lib/usr/local/include将使它们直接在系统中可用,但它们将与文件夹中的所有其他文件保持无序。更令人不安的事实是,如果有人安装另一个与我的头文件同名的共享库,可能会发生未知行为;
  2. 将文件放在子文件夹 ( /usr/local/lib/myAwesomeProject/and /usr/local/include/myAwesomeProject) 中将避免上述行为,但会阻止系统自动检测我的库(据我了解,系统会自动非递归地仅在特定目录中查找包含和库):因此,如果系统查看/usr/local/include,由于子文件夹,我的包含不会被找到!

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

  • 操作系统系统:Ubuntu 16.4(64位在Windows 10 64位虚拟化);
  • CPU(不是我认为有用):Intel® Core™ i5-3230M CPU @ 2.60GHz × 2;

感谢您的任何友好回复!

Arm*_*ali 3

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

——齐瓦列夫