make install与inplace链接

时间:2012-08-09 05:57:50

标签: c++ linux makefile cmake build-system

在按拓扑排序的顺序构建依赖于C ++ CMake项目(在Linux中)时,我们有两种可能性:

完成每个项目,然后......

  1. ...“make install”它在某个前缀中。在项目中构建库时,链接到已安装的库

  2. ...通过“make”构建它,不要安装。在项目中构建库时,链接到已建立的库到位

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

2 个答案:

答案 0 :(得分:1)

当然,你可以做到这两点。但是“安装”的想法是将库,标题,文档等放在一个定义良好的目录中,而不依赖于源代码树的布局。

单独的源代码,通常只是该程序包的程序员,并编译了proagrams库等,这对其他软件包的用户和程序员来说很有趣。

想象一下,您必须更改一个子包的目录结构。如果没有安装,你将不得不调整所有其他man脚本。

所以:

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

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

答案 1 :(得分:0)

预计

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

  • make(all) - 您的所有生产应该生成项目的每个可执行文件。平时 所有制作没有明确的规则;相反,它指的是你所有的 项目的顶级目标(并且,不是偶然的,记录那些是什么)。 通常,这应该是makefile中的第一个产品,所以它会 是开发人员类型在没有参数的情况下执行的。

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

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

致Ericis Steven Raymond的回答