进行安装与就地链接

make install vs. inplace linking

本文关键字:链接 安装      更新时间:2023-10-16

当以拓扑排序顺序构建 multiply dependant C++ CMake 项目(在 Linux 中)时,我们有两种可能性:

遍历每个项目,然后...

  1. 。"安装"它在某些前缀中。在项目中构建库时,链接到已安装的库

  2. 。通过"制作"构建它,不要安装。在项目中构建库时,请就地链接到已构建的库

这些选择的优缺点是什么?由自制脚本执行构建,该脚本解析依赖关系,以正确的顺序构建等。

当然,

你可以同时做这两件事。但是"安装"的想法是将库,标头,文档等放置在定义良好的目录中,该目录不依赖于源代码树的布局。

单独的源代码,通常只有该包的程序员感兴趣,以及编译的proagram库等,这对于其他包的用户和程序员来说很有趣。

假设您必须更改一个子包的目录结构。如果不安装,您将不得不调整所有其他脚本。

所以:

解决方案

1 的优点(== 解决方案 2 的缺点)

  • 更好的整个包的可维护性
  • "预期"的方式

makemake install应该执行两个概念上不同的事情。它们没有更好或更坏。我将通过描述使用make的程序安装的通常顺序来解释(来自"Unix编程的艺术"):

  • make(all) - 您的所有产品都应使项目的每个可执行文件。通常所有生产没有明确的规则;相反,它指的是您的所有项目的顶级目标(并且,并非偶然地记录了这些目标是什么)。按照惯例,这应该是您的制作文件中的第一个作品,因此它将是当开发人员类型在没有参数的情况下执行的那个。

  • make test - 运行程序的自动测试套件,通常由一组单元组成测试以查找回归、错误或与预期行为的其他偏差在开发过程中。也可以使用"测试"生产由软件的最终用户提供,以确保其安装正常运行正确。

  • make install - 在系统目录中安装项目的可执行文件和文档,以便一般用户可以访问它们(这通常需要root权限)。初始化或更新可执行文件所需的任何数据库或库才能发挥作用。

感谢埃里克·史蒂文·雷蒙德的回答