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

时间:2016-12-28 10:41:11

标签: c cmake shared-libraries

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

当用户运行着名的sudo make install时,我应该在哪里放置so和头文件? 据我所知:

  1. 我不应该将它们放在/usr/lib/usr/include中,因为这些文件夹是为分发包保留的;
  2. 我不应该将它们放在/lib/include中,因为这些文件夹是为操作系统启动包保留的;
  3. 这让我留下了usr/local/lib/usr/local/include。但是我无法决定是否应该将文件放在子文件夹中:

    1. 将文件直接放在usr/local/lib/usr/local/include中会使它们在系统中直接可用,但它们将与文件夹中的所有其他文件保持无组织状态。更令人不安的事实是,如果某人安装了另一个共享库,其标题与我的名称相同,则可能会发生未知行为;
    2. 将文件放在子文件夹(/usr/local/lib/myAwesomeProject//usr/local/include/myAwesomeProject)中将避免上述行为,但会阻止系统自动检测我的库(根据我的理解,系统会自动查找包含和库只在特定目录中非递归):所以如果系统查看/usr/local/include,我的包含将因子文件夹而找不到!
    3. 为了帮助你,这是我的系统:

      • OS系统:Ubuntu 16.4(在Windows 10 64位上虚拟化64位);
      • CPU(我认为不是很有用):英特尔®酷睿™i5-3230M CPU @ 2.60GHz×2;

      感谢您的回复!

1 个答案:

答案 0 :(得分:2)

  1. 库和标头位置的方法可能不同:您应将库直接放置/usr/local/lib中(否则链接程序将找不到它们),但可以将标头放置在子文件夹下< / b>(/usr/local/include)(因此它们不会与其他库的标头混合在一起)。
  2. 问题itsels基于基于观点,因为关于安装位置没有没有通用规则。作为一种简单但广泛使用的方法,您可以使用GNUInstallDirs CMake模块中的安装目录。

– Tsyvarev