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