" z- G1 Q! a. E2 e7 [* Z7 `6 _3 {$ t. T
- q" m, c ]0 d {
$ x: U. W- q: G
8 L4 @( p6 [! r& C* |# p8 \ 关于make时,通过-j参数指定多线程数目 2 F8 `# |7 P2 @) I# M+ z1 f2 _5 [7 ]6 k6 K& L9 V8 K
之前在折腾crosstool-ng:: b' u3 p T8 S) p a1 i
1 E5 k+ y- p0 R6 E" F8 J) _【记录】crosstool为xscale编译(ct-ng build)过程) u9 f7 R6 x1 E. b3 X: P
% J, p7 ~- M/ o
时,就偶尔看到别人用 - i: K$ Z# s+ h1 w8 s. F7 Y3 y
ct-ng build.4 + d3 i& s" Q0 `8 f) I% ^& P% E$ d! ~6 I* w2 K: X& o
意思是多线程去编译 & e/ T y& X; N9 k3 o) T2 m. w 4 I4 \7 q: n( B' W, w" v8 u估计底层就是调用的makefile的支持多线程的这个功能。 . n, X2 m) f! q$ A ) E& [& C6 f6 K4 Q2 u: m& B8 f- C/ _后来又在别处看到类似的写法了:# `' B( w+ o2 D
" f* S/ y* W5 j* b1 K
Introduction to Cross Compilation4 ~* V: Q- G' |* }" n
; y: s+ O1 x- a- w0 S9 E$ i( U) B中的:! B' i; Y6 Z% z I e8 s7 D: ]# ?
- B6 P; v h# U+ j/ O; p
1 make# d$ g- D8 v+ _6 E! o
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi- uImage -j45 R- H# x' S: u6 S; l
) W2 ^3 z1 d2 P1 B% I4 }. p
: P& a0 t+ o5 r* B0 L4 |
此时,才想到,去查查make的参数:1 A0 ~# w& I7 M. j
% K' j) m' n" m* |/ c0 b" v
(此处是在cygwin中)* A) P4 q# H3 m/ I$ Y1 Q& W
. \9 q: A; y1 S% h; P
8 `* G$ L, J' f& p1 c% S# Q. V$ d/ }
Administrator@PC-20130611GART ?' |* o7 b2 A$ K/ W/cygdrive/e/Dev_Root; f N+ z5 V6 q1 m5 F
$ # q+ }9 E. V! F5 ~, Vmake 8 V1 p7 R* o7 _ / X! U( i6 Q, X5 V2 L
--help5 C- w# }; Q+ f$ c
Usage: $ d$ `0 t! y7 Y/ o6 n! N, Lmake . ]5 k; V2 R. Z+ C N( Y 4 t5 X- X% r D[options]& E/ t9 b& Y- H# c$ U
[target] ...0 U4 V$ u& F" Z; S o, \
Options:/ e- O( F3 j* |( q! l# c+ P% `
. f; j, L* n' w. o5 I4 Pcompatibility." }9 o) ?4 k$ m& Y, s
3 E" B! q5 }5 \% ]- C-B, 2 H$ W/ e' C8 S9 ^0 w8 Y7 y--always-5 B* N j) x2 W; `0 `
make * `5 f n" z \- u9 Q. h( _2 o( d" R 7 w4 F& _1 C( |% b; YUnconditionally6 P6 ?+ M6 T. r* |' S5 Z+ g3 A
make 6 k+ Y0 E! t& P! l( {+ ?- y7 R2 X ; H% e* z. J: y( M1 j! e; e
all# s( Z/ F0 _" W. Y3 R/ i' H7 [* j8 f( h
targets. " F* y) V1 n! K- A; f7 B6 O 1 x% k. V/ f9 R& \) p" d7 e
-C) D( w# P6 x) R( i# ^6 g& J; b
DIRECTORY, --directory=DIRECTORY & M6 D' e9 R! U, Q( I0 `& U ' s1 K2 w5 w5 JChange 7 _7 n5 h) d, tto DIRECTORY before doing anything.- C; N! Y/ v: o5 t; F
' I6 t. I. g% b! f( K-d R9 T+ r1 K9 f
Print lots of debugging information.. E8 q$ R- g& @5 W O, [9 _
9 T; I3 L7 E- i7 s) W: m% t- C--debug[=FLAGS] s9 t9 m6 }8 T
Print various types of debugging information. 5 @7 w/ K7 q3 b( `3 V2 w ( Q# ?! W$ v9 O3 G-e,5 O2 m6 [6 t; A; r
--environment-overrides. v O7 Y6 p+ T/ T4 T8 r
. u+ i) I) T8 ]$ c. N4 @
Environment }4 ?7 A9 F4 m w9 o9 J
variables override makefiles. 5 D, o9 |4 `" j S/ R * U6 r! e+ l0 d$ F, w L9 K+ h
--: f6 _( J' L) _: o
eval/ G% V, X9 ?+ O3 U0 V: `* w2 z; ^
=STRING . H! \6 N/ ?3 A* D
Evaluate STRING as a makefile statement.1 X* K$ E4 g: p9 I9 ?% [
; k1 r- [. e. W0 ~5 p: R* i, [2 V
-f8 `: R% D( i d9 {5 T8 C
FILE, --7 X- [$ w* X- u; e; F
file; U, u4 l/ c- R! S8 ]' o
=FILE, ! t' i2 |5 q0 {4 R& P" ^--makefile=FILE! v" m) s7 K. T" A
' ^" A/ p4 |( J/ Z
Read : ^# d% n7 {% P A/ NFILE as a makefile.6 t7 g; p+ n3 m! }* g7 L. }
0 x8 @) G: Q6 k; D* c) k
-h," q( C2 E' p% N& r7 H
--help Print this message and4 {: y& O2 R! c( Q! D
exit : B( N j4 i; F, r0 v- \! E. + S; p0 [' k1 N * [' `) v/ w) V, X) u1 K# Q+ m& [. c" `-i,. ?$ g( c9 E7 N3 s
--ignore-errors Ignore errors from recipes. 2 |4 ~: U; m4 D : o9 P4 T9 R" d, M+ }% i, b-I! u. Q# O& ^( S9 F$ y" Z% h
DIRECTORY, --include-5 t* n! d. \7 B7 c" C
dir5 d- E7 c: h, X
=DIRECTORY# h2 Q. P; g4 r2 ~1 c1 V2 E
2 K' s2 y+ k# u- KSearch) H1 w+ o5 x# D8 ?7 N
DIRECTORY 8 o8 K- q+ R1 Q& p$ R3 ?) e9 _for ) A- Y- Y; O/ Y. i1 n/ i8 d / |8 w& |: W6 L, c: nincluded 1 k, j$ Y G" Gmakefiles. $ R5 [; `0 S, P) p8 @2 R$ M 1 {' M G" t) N9 L
-j; o) I9 u0 p5 B* U
[N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.7 d6 \9 x1 X0 y- A. O5 M4 G7 X
4 B) l N9 r2 U$ q, W-k, : Z. D, t& B8 k. d' |# t( Z9 P--keep-going Keep going when some targets can't be made. + h3 @% P8 I) t + W) {9 s1 N" i-l7 ]% ^. u6 }$ w# P
[N], --load-average[=N], --max-load[=N]9 c& f1 f" ?7 o; Z# g
6 ? ]' h0 a0 [. C2 P
Don't8 K3 C) _& ]; B
start multiple jobs unless load is below N.* C9 U* Z- y: Q6 _+ ^
d; p1 {; L* K) q-L,1 _% S. _" y, f- \% x
--check-" y; d/ h1 q2 Y4 H& Z3 S& c
symlink 8 V4 M0 N. K: C b. v-% R8 h5 B$ I' G1 n( e
times : x0 O, w9 ]- T2 }' J * y7 C/ i% I- e0 \Use( g5 Q" ^4 X% N+ A! I) i
the latest mtime between symlinks and target.2 d8 e' I; E$ E
' g R. C% m3 C0 J* g- a
-n,/ L3 Z$ a: p- t) M% K0 f( \
--just-print, --dry-run, --recon3 X8 _5 b+ x, l, q2 N* @. t
* T+ F9 Q( A& z0 w" B( v& A4 X. N2 x5 J
Don't + ?# ?$ s0 f" j+ N' V; A/ H; J0 Hactually run any recipe; just print them. $ I7 x' C) f; k( G# ?6 [ w 8 T' j, p5 T" z5 X" |-o , O* v/ k" N5 ]6 Q. _% g7 P1 |9 YFILE, --old- $ H$ o/ K# d/ l1 N$ m0 ~file F/ Q: W4 C/ f# }' V2 {2 ]1 S=FILE, $ z% G" I5 w J--assume-old=FILE x7 ~; y; `4 U- |& D" o: [) U. U * b. O- i$ U; y) W
Consider " W6 v9 K$ r- J' K JFILE to be very old and don't remake it.$ ], `: e$ p6 X0 X( u) i% H
* j5 A' M7 U, O
-p,$ z0 [( g% b3 C0 a c
--print-data-base Print " H0 Y' P. C/ xmake9 `2 B6 K( o7 F/ c
's% b; C$ u9 H+ v2 \
internal database.3 Q& k' K, q/ F6 H
! }& g* v9 [9 v4 q* m; _8 g
-q, 0 n+ U0 y' ? d2 o8 m' S--question Run no recipe;$ ?- v4 ~6 B9 g" U F. h& L0 G) q
exit ( W6 }9 _3 p9 R& K( l2 ]$ R" W 3 ]" i2 c# w$ p; b' R1 L( m
status 0 W$ F3 y" v' a& T6 {says . N% r% t1 H9 g# E# Rif4 k- K, h6 d4 ~
( I8 C) {( d6 |1 c6 Qup W9 u7 j+ u$ C3 Y! h. P* N
to , n7 ^8 t1 e. X; P9 S, b) Udate# V# s" r" b" q6 A/ b5 [
. 2 [3 Y& A. L1 h) s$ _ 2 Z: ~) m9 K7 {( A6 W% O' |: ]
-r,* N3 l7 [! M& Q; h
--no- $ d" f2 Q; F! n0 }! H1 Z- Nbuiltin& N' n$ O0 V# S2 y) j$ i E
-rules * S1 X: t- N0 x( J6 iDisable the built- 6 Y) F2 p1 U1 z. l% Y! O' cin) q1 O' Y" y" h/ c4 u
8 Z. w5 s, e/ G/ d9 n" gimplicit 5 d$ w$ l# L, Arules. 4 r& q! Y0 r- H9 n% w 7 ]* s+ y* s' S4 f-R, 6 L5 @. @0 ~2 s7 s# K! @--no-: k5 a a3 R' \& P
builtin# W' a9 _% G E$ C
-variables % H0 X2 s$ q k- z( B
Disable the built- 7 T3 X; B* y7 H5 S" jin. Y R3 _( @0 ]3 M
/ `- C2 e S* V% A' R
variable3 [1 g( r8 [- r6 M
settings.( h3 z9 A: ?2 A! ^& W
' t, W, J/ I6 J/ J- c-s, # R& Q! d9 N7 v--silent, --quiet Don't- r$ x1 o; h) D Z" d5 b
echo+ I! g/ A3 N. q( s
1 w9 s0 f' z- K0 e/ D4 q0 v6 j" b
recipes. 4 ]* A9 b% }$ a3 e2 U) f * j( b( I( T+ E6 W
-S,8 s7 _$ A; w9 H# z; _2 J, d
--no-keep-going, --stop " k$ c% C" |' @9 K 3 n( ]- J$ Z/ [0 n! U
Turns/ c* k' v4 `( Q z$ B4 s
off -k. ) g2 m" V0 o: Q/ l* ^4 L T / `& n2 L5 Z7 `4 C2 ?- y. p% K! s-t,/ q% R4 { K. I; S+ ?
--* L z: _0 h1 M. a7 @; P
touch * |3 M- |7 U& B' \$ x/ C . P7 ?% Q1 x1 X
Touch+ o1 t0 U# X/ v& m4 A) ~
targets instead of remaking them. Q4 S" [- ]7 S( ~7 u
2 @8 T8 ^6 O9 b$ w" s; ?--trace * g1 G+ o4 j+ B" pPrint tracing information. . Z2 N6 V- G( @* p ) x X' Y& j$ t/ L7 S
- ; M3 V5 V g- f# K# K+ bv + j( }/ a$ v( k+ C6 y0 A7 },; T+ p- U5 Z& e6 ]! A
--version Print the version number of 7 i+ V# Z8 \+ M. ?/ K& ?# Y! vmake7 }3 j @ h+ r h3 g: N/ B
) ?7 x* b! I3 I8 [
and . ?; D9 ~; i" l3 }7 Rexit 7 D4 K! |' m( v. Y1 f& A% \! D& [.3 _ e$ Q7 c' J5 j) b
O; j% \! H W+ g-w,6 C9 D j* m; ?; A% n
--print-directory Print the current directory. % x. o J' x1 K8 Z! H# K * Q7 X& _' K* i' M
--no-print-directory % z. ~( I3 E$ ZTurn off -w, even : E# [9 G& b( e, fif. h- u8 _# f) @9 X% k
: J. u" y3 O. k; B% a& u! X% Rit . U% f* O0 G9 `was turned on implicitly. 9 e; L; g4 |; M" l; } + M4 @5 ~( f- S3 I-W . B: I& n# Y& L- e( k" zFILE, --what-% ~3 I B3 f" @, i
if6 h8 S# ], T6 s- I1 ]
=FILE,3 P5 ~7 [5 W$ Z- I
--new-6 R2 |' {5 O+ f) g$ }1 k; v6 h) x3 B
file 5 B! ` a/ q( b9 Z- z7 F=FILE, 4 D& f1 b6 c/ O6 Q" e5 O! X--assume-new=FILE 7 N1 ^6 I! d8 Z + U, I( }/ G' `/ K8 @0 e: CConsider ; k4 I" [7 q( J; ^- I hFILE to be infinitely new. V: s9 Z8 a9 I
+ M9 c h3 r; N& H
--warn-undefined-variables 7 l: N8 s' i1 A7 s. V9 u" L* F
Warn when an undefined variable is referenced. 7 N) @9 K [0 p5 B1 q+ A; m 4 W8 P* E/ L# h6 c6 [3 zThis + j: Z' q/ O5 s+ d/ p5 Fprogram built 3 \1 K- W% j- Y$ b6 u6 Pfor 9 q0 o1 `& @1 s* E4 H3 N5 T9 } / ] I8 v8 T! j/ L7 [; wi686-pc-cygwin1 R) u2 t! O& \
Report* i& }9 c. X& ?# ?7 W( m) d( H
bugs to <bug- : p4 {" Y/ `/ E$ |6 cmake , V; ?% A; N- ~7 Y' i2 c) B" F@gnu.org>3 s$ l, |: u+ o$ l2 e( `; W) v3 d
1 z5 T9 x. r# t% h
Administrator@PC-20130611GART , @0 w8 v4 c" \; @ ^2 ^* D1 k/cygdrive/e/Dev_Root 1 d x: n! Q( h+ Y$3 x, A0 T* B4 L; ^ k$ E
( _$ {( M9 u6 d. ^/ d " M; Y; ]% n. m9 @" B2 I : W1 i a1 N7 s: c5 ? L9 _- y. u6 l o# _! \2 ]
4 Z0 R/ p( l4 K4 O' f, K3 F
果然对应的-j==–jobs,指的是多线程的意思: + t4 J/ R+ }6 O( ]9 n S # O, Y- y$ K7 A3 e: k-j ) y4 k7 A, s1 b8 `" P4 q% v [N], –jobs[=N] Allow N jobs at once; infinite jobs with no arg. k/ Z! P9 k! @" x8 A
( o- n7 H7 U% U7 W. d- @
# |" l0 c5 x q) X5 j M _: I3 P( ?3 S# M; i
用法即: ) `. c- O" H/ D9 D3 A, B/ o: s$ T8 i/ u$ X8 V5 N" U) M, t8 C0 Y
1 make& O$ d' E/ |, t8 u
–j
4 % _* q( D. t- d H% w. U" R% o
1 L i6 G( n1 q1 a8 ?# L2 u% @7 `4 P$ G5 e/ B+ ~+ P
或 ' U# c2 E) G0 O9 W z4 R- k% U6 j! y4 o9 a9 v1 make) _6 q1 u: ]( j% N M5 y
–jobs=4 ; s4 j; i ~: n* K# O) c
- W0 J" T4 k5 f; m# E$ f3 N3 E: a1 W* y! r1 I% t make加上-s,表示silent,不输出详细log信息 g' E( u. k- c3 j; d$ _ . B- S. G4 u0 o, Z& K2 F# _ N之前折腾: 3 ^% u8 I( b9 X, }5 a, L+ V0 X5 \' r% Q4 E
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs7 V5 g8 P8 i, i) |; e: e! q
2 u# C: Q Y$ I, v
参考的:2 l4 e" H D0 z% a( \( ~: f9 V
9 C* ~. G% f( f) T9 ~
Virtual Development Board , n- D" i8 }: T( U S6 y4 F% T ; K- ~; e) T2 r/ s8 u2 [ w中就用到: 9 s* T4 `7 C. K( [ " T6 I& S5 T2 S5 y0 G( a' _6 R
sudo
make - x3 _5 L( @4 g6 A: E- n3 w, ?
; }. I6 r6 M2 n4 J, f- {$ Tinstall + m- t9 z7 X) w- D9 T; d3 h# A 3 x4 K4 o3 O7 P4 a
-s - T) g% C6 P% o" q) C3 l) \3 fmake . {" L2 m* f% h3 s: s 8 v" ?# F4 [! A; t7 Q8 _
ARCH=arm . E' w' y3 s t: yCROSS_COMPILE=arm-none-linux-gnueabi- versatile_defconfig -s' e/ B# ~) H# ?- R
make8 s; i( X9 }4 j* V7 o
1 Q7 n# ^- _* X/ ~8 Z; v
ARCH=arm8 [; ^3 i/ {2 M" s+ c
CROSS_COMPILE=arm-none-linux-gnueabi- uImage -s( R2 f; b4 l! n2 ^" S0 ~: F8 l
: q8 ?+ }& H5 n, }# {6 O( C W
! W: l5 |( ^% z5 ]2 D
. g% `9 A* K g$ m# [3 N* J% u0 Q 0 L, D0 c/ f- I! h0 D+ \2 [3 T4 ~) s) g l
其中的-s参数,之前就猜测是silent的意思。6 O! X# Q9 ^' a
+ l- L4 S) V2 D Z9 T
根本上面的–help输出的信息,果然是: h8 [9 v( S/ n& v" l# F
' F8 W+ x/ I# d' @-s,, ] W) ^! G. c4 J* N
–silent, –quiet Don’t echo recipes.* `6 m0 g0 P. a: H1 l) h
) m4 \6 n5 n; C/ F