3

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

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

  1. ...在某些前缀中“进行安装”。在项目中构建库时,链接到已安装的库

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

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

4

2 回答 2

1

当然,你可以两者都做。但是“安装”的想法是将库、头文件、文档等放置在一个定义明确的目录中,这不依赖于源代码树的布局。

单独的源代码,通常只对那个包的程序员感兴趣,编译的程序库等,这对用户和其他包的程序员很感兴趣。

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

所以:

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

  • 整个包的可维护性更好
  • “预期”的方式
于 2012-08-09T06:06:18.423 回答
0

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

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

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

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

这个答案归功于 Eric Steven Raymond

于 2012-08-09T06:26:16.903 回答