make[number] 在 make V=s 中是什么意思?

tra*_*tnh 4 compiling make gnu-make

当我启用make V=s读取make. 我总是make[numer]在日志中看到。
例如:

datle@debian:~/workspace/cpx/trunk$ make
rm -rf openwrt/tmp
cp config/defaut.config openwrt/.config
cd openwrt && make
make[1]: Entering directory `/home/datle/workspace/cpx/trunk/openwrt'
make[1]: Leaving directory `/home/datle/workspace/cpx/trunk/openwrt'
make[1]: Entering directory `/home/datle/workspace/cpx/trunk/openwrt'
make[2]: Entering directory `/home/datle/workspace/cpx/trunk/openwrt'
Collecting package info: done
Collecting target info: done
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'gawk'... ok.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'patch'... ok.
Checking 'perl'... ok.
Checking 'python'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
make[3]: Entering directory `/home/datle/workspace/cpx/trunk/openwrt'
Checking 'openssl'... ok.
make[3]: Leaving directory `/home/datle/workspace/cpx/trunk/openwrt'
make[2]: Leaving directory `/home/datle/workspace/cpx/trunk/openwrt'
WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!
 make[2] world
 make[3] target/compile
 make[4] -C target/linux compile
 make[3] package/cleanup
 make[3] package/compile
 make[4] -C package/toolchain compile
 make[4] -C package/wireless-tools compile
Run Code Online (Sandbox Code Playgroud)

我阅读了制作手册,但没有找到任何有关此的详细信息。

cuo*_*glm 5

这些数字代表 for makelevel,这让我们知道 sub-make 与 top-level 的关系make

这是 make 的递归使用,请在此处查看更多详细信息。

深入研究make源代码,您可以看到更清晰的内容。

main.c

/* Value of the MAKELEVEL variable at startup (or 0).  */                       

unsigned int makelevel;
Run Code Online (Sandbox Code Playgroud)

进而:

/* Figure out the level of recursion.  */                                     
  {                                                                             
    struct variable *v = lookup_variable (STRING_SIZE_TUPLE (MAKELEVEL_NAME));  
    if (v && v->value[0] != '\0' && v->value[0] != '-')                         
      makelevel = (unsigned int) atoi (v->value);                               
    else                                                                        
      makelevel = 0;                                                            
  }
Run Code Online (Sandbox Code Playgroud)

output.c

/* Use entire sentences to give the translators a fighting chance.  */        
  if (makelevel == 0)                                                           
    if (starting_directory == 0)                                                
      if (entering)                                                             
        fmt = _("%s: Entering an unknown directory\n");                         
      else                                                                      
        fmt = _("%s: Leaving an unknown directory\n");                          
    else                                                                        
      if (entering)                                                             
        fmt = _("%s: Entering directory '%s'\n");                               
      else                                                                      
        fmt = _("%s: Leaving directory '%s'\n");                                
  else
Run Code Online (Sandbox Code Playgroud)

并在打印前格式化输出:

if (makelevel == 0)                                                           
    if (starting_directory == 0)                                                
      sprintf (p, fmt , program);                                               
    else                                                                        
      sprintf (p, fmt, program, starting_directory);                            
  else if (starting_directory == 0)                                             
    sprintf (p, fmt, program, makelevel);                                       
  else                                                                          
    sprintf (p, fmt, program, makelevel, starting_directory);                   

  _outputs (NULL, 0, buf);
Run Code Online (Sandbox Code Playgroud)

笔记