Compiling
做什麼numbern在米b和rnumber意思是使V = s?
當我啟用
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);
筆記
- 源程式碼