Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
make-install与in-place链接 < P>在拓扑排序顺序中建立乘积依赖的C++ CMASE项目(Linux)时,我们有两种可能性:_C++_Linux_Makefile_Cmake_Build System - Fatal编程技术网

make-install与in-place链接 < P>在拓扑排序顺序中建立乘积依赖的C++ CMASE项目(Linux)时,我们有两种可能性:

make-install与in-place链接 < P>在拓扑排序顺序中建立乘积依赖的C++ CMASE项目(Linux)时,我们有两种可能性:,c++,linux,makefile,cmake,build-system,C++,Linux,Makefile,Cmake,Build System,检查每个项目,然后 。。。在某个前缀中“makeinstall”。在项目中生成库时,请链接到已安装的库 。。。通过“make”构建,不要安装。在项目中构建库时,链接到已构建的库 这些选择的利弊是什么?由自制脚本执行的构建,该脚本可解析依赖项、按正确顺序构建等。当然,您可以同时执行这两项操作。但“安装”的思想是将库、头、文档等放在定义良好的目录中,而不依赖于源代码树的布局 单独的源代码,通常只有该包的程序员感兴趣,编译的proagrams库等,这对其他包的用户和程序员来说很有趣 假设您必须更改一个

检查每个项目,然后

  • 。。。在某个前缀中“makeinstall”。在项目中生成库时,请链接到已安装的库

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


  • 这些选择的利弊是什么?由自制脚本执行的构建,该脚本可解析依赖项、按正确顺序构建等。

    当然,您可以同时执行这两项操作。但“安装”的思想是将库、头、文档等放在定义良好的目录中,而不依赖于源代码树的布局

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

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

    因此:

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

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

    make
    make-install
    预计将执行两个概念上不同的操作。它们没有好坏之分。我将通过使用
    make
    (摘自“Unix编程艺术”)描述程序安装的一般顺序来解释:

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

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

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


    Eric Steven Raymond的回答值得称赞

    谢谢,我更喜欢使用“make install”的解决方案,因为这是一种“标准方式”——您可以区分构建系统的内部实现细节和它实际构建的内容——因此这更灵活。