我正在使用 Cmake 为我的大学开发一个简单的 C 共享库。 目前我正在开发我的 *.so 和我的 .*h 文件的安装过程。
当用户运行著名的 sudo make install
时,我应该把 so 和头文件放在哪里?
据我了解:
- 我不应该将它们放在
/usr/lib
和/usr/include
中,因为这些文件夹是为分发包保留的; - 我不应该将它们放在
/lib
和/include
中,因为这些文件夹是为操作系统启动包保留的;
剩下的就是 usr/local/lib
和 /usr/local/include
。但是我无法决定是否应该将我的文件放在子文件夹中:
- 将文件直接放在
usr/local/lib
和/usr/local/include
中将使它们直接在系统中可用,但它们将保持杂乱无章的状态文件夹中的其他文件。更令人不安的事实是,如果有人安装了另一个共享库,其 header 与我的名称相同,可能会发生未知行为; - 将文件放在子文件夹中(
/usr/local/lib/myAwesomeProject/
和/usr/local/include/myAwesomeProject
)将避免上述行为,但是将阻止系统自动检测我的库(根据我的理解,系统仅在特定目录中自动查找包含和库非递归):所以如果系统查看/usr/local/include
,我的include会因为子文件夹找不到!
为了帮助你,这是我的系统:
- 操作系统:Ubuntu 16.4(64 位在 Windows 10 64 位上虚拟化);
- CPU(不是我认为有用的):Intel® Core™ i5-3230M CPU @ 2.60GHz × 2;
感谢您的回复!
最佳答案
- 库和 header 位置的方法可能不同:您应该将库直接放入
/usr/local/lib
(否则链接器将无法找到它们)但可能将 headers 放在/usr/local/include
的子文件夹下(这样它们就不会与其他库的头文件混合)。 - 问题本身是基于意见的,因为关于安装位置没有通用规则。作为一种简单但广泛使用的方法,您可以使用来自 GNUInstallDirs 的安装目录。 CMake 模块。
–齐瓦列夫
关于c -/usr/local/lib 中的子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41360283/