【问题标题】:Path to store libraries. Best practice needed存储库的路径。需要最佳实践
【发布时间】:2013-12-17 08:54:30
【问题描述】:

我打算在 Linux 下用 C 和 C++ 做几个项目。在某些项目中,我需要额外的库。如我错了请纠正我。我打算将库存储在/usr/local/include 中。但是将所有库混合在一个目录中是一种好习惯吗?也许最好在/usr/local/include 目录中创建库名称子目录?也许将标头和源代码存储在不同的目录中会更好?需要最佳实践。

如何处理未编译的库,例如 MiniIni https://code.google.com/p/minini/。它带有头文件和 C 文件。我应该编译它并放在/lib 目录和标题到/include。或者最好将所有内容都放在 /include 中?

【问题讨论】:

    标签: c++ c linux libs


    【解决方案1】:

    如果您谈论库,我假设您的意思是编译库(.so 文件或.a 文件)。那些应该进入/usr/local/lib/。标头应进入/usr/local/include。来源.cpp 文件通常不应该在安装中的任何位置出现。有时需要安装它们,以便可以按需重建它们(想到 dkms)。然后来源应该进入/usr/local/src/project_name/

    我个人更喜欢将头文件和库安装在/usr/local/include/usr/local/lib 的子目录中,但并非所有人都同意。

    /usr/local 前缀始终应该是可配置的。虽然传统的 make install 应该使用它作为默认值,但发行版上的打包程序肯定会将其更改为直接安装到 /usr 中。

    【讨论】:

    • 如何处理未编译的库,例如 MiniIni code.google.com/p/minini。它带有头文件和 C 文件。我应该编译它并放在/lib 目录和标题到/include。或者最好将所有内容都放在 /include 中?
    • @user1501700 这是一个非常特殊的情况,看起来不应该安装但包含在使用它的项目中。你的项目不太可能像这样结束。
    【解决方案2】:

    我希望您没有将库存储在 /usr/local/include 中。它们属于 /usr/local/lib 或可能属于 /usr/local/lib64。

    单个项目所需的标头不应进入 /usr/local/include,它们应保留在项目中。如果您正在构建要包含在多个项目中的库,则仅将内容放入 /usr/local/lib 和 /usr/local/include 中。即使这样,我也会将标头保留在项目的本地,并且仅将它们复制到 /usr/local/include 作为构建过程的一部分。

    对于你的项目树中的相同目录或不同目录,这取决于项目有多大。当文件(源 + 包含)的数量开始超过 20 时,我通常会开始将内容移动到单独的目录中。

    【讨论】:

      【解决方案3】:

      现在谈到您使用子目录的问题。将所有库混合在一个目录中从来都不是一个好习惯。所以更好的方法是拥有子目录,然后使用“相对”路径引用相应的文件。

      【讨论】:

        【解决方案4】:

        我建议将所有库存储在 customlib 目录中。

        将 LD_LIBRARY_PATH 环境变量设置为此目录或使用 -L 选项,如果使用 gcc(例如对于 minini)。

        这样你的工作不会侵入你的系统,也不会破坏它。

        【讨论】:

          猜你喜欢
          • 2019-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 2015-10-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多