Compiling

做什麼numbern在米b和rnumber意思是使V = s?

  • June 27, 2014

當我啟用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

我閱讀了製作手冊,但沒有找到有關此的任何詳細資訊。

這些數字代表makelevel,這讓我們知道 sub-make 與 top-level 的關係make

這是 make 的遞歸使用,請在此處查看更多詳細資訊。

深入研究make原始碼,您可以看到更清晰的東西。

main.c

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

unsigned int makelevel;

進而:

/* 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;                                                            
 }

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

並在列印前格式化輸出:

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);

筆記

引用自:https://unix.stackexchange.com/questions/139459