【问题标题】:meaning of llvm[n] when compiling llvm, where n is an integer编译llvm时llvm[n]的含义,其中n为整数
【发布时间】:2015-09-11 19:23:46
【问题描述】:

我正在编译 LLVM 和 clang。我注意到编译的输出有 llvm[1]:llvm[2]:llvm[3]: 前缀到每一行。括号中的整数是什么意思?

【问题讨论】:

    标签: clang llvm gnu-make


    【解决方案1】:

    显然,它与编译作业的编号无关(可以通过 make -j 1 轻松检查)。基于 autoconf 的构建系统指示源代码树中 makefile 的“级别”)。作为价格,它是make的MAKELEVEL变量的值。

    【讨论】:

      【解决方案2】:

      当前接受的答案不正确。此外,这实际上是一个 GNU Make 问题,而不是 LLVM 问题。

      您看到的是由make 回显到命令行的MAKELEVEL 变量的当前值。该值是递归执行的结果。来自GNU make manual

      作为一个特殊功能,变量 MAKELEVEL 在从一个级别传递到另一个级别时会发生变化。这个变量的值是一个字符串,它是十进制数的级别深度。顶级品牌的值为“0”; ‘1’代表子品牌,‘2’代表子子品牌,以此类推。当 make 为配方设置环境时会发生增量。

      如果您手头有 GNU Make 源代码的副本,您可以看到使用 void message(...) 函数在 output.c 中生成的输出消息。在 GNU make v4.2 中,这发生在第 626 行。具体而言,program 参数设置为字符串“llvm”,并且 makelevel 参数设置如上所述。

      由于是错误调出的,所以不是编译作业的编号。 -j [jobs]--jobs[=jobs] 选项支持同时并行执行最多jobs 个配方。如果选择了-j--jobs,但未设置jobs,GNU Make 会尝试同时执行尽可能多的配方。请参阅this section of the GNU Make manual 了解更多信息。

      可以在没有并行执行的情况下进行递归执行,也可以在没有递归执行的情况下进行并行执行。这是当前接受的答案不正确的主要原因。

      【讨论】:

        【解决方案3】:

        这是编译作业的编号 (make -j)。有助于跟踪编译错误。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 2015-09-02
        • 1970-01-01
        相关资源
        最近更新 更多