一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4171|回复: 7
收起左侧

MAKEFILE 学习心得

[复制链接]
发表于 2017-5-4 18:49 | 显示全部楼层 |阅读模式
正所谓用之于网络还之于网络,从完全不会到略有所成真是一波三折,学会从网络查找所要的东西的重要性。, y9 d, q# Y- [: o1 {
MAKEFILE 学了差不多半个月了,一值没有放弃,因为真的有用。
* |) ~: P4 E2 R4 H" w/ }- z学MAKEFILE还是看UBOOT的MAKEFILE ,因为以后不管是ARM也好MIPS 也好都是UBOOT 行头用的就是MAKEFILE生成
! [* C2 |  v* Y& j6 I7 V( S" H淘宝上买回来的学习板人家都移植好了你可以不看,但会修改你想要的功能去掉不要的功能都是非常重要的,
3 v( O. O; i$ X! `+ r$ r如果你是搞应用的可以不用学,但如果你是一个比较关心底层的那还是学一下为好,不管怎样看你自己的想法
9 a( n+ K' _' c/ [7 t在这我会不定时将学到的一点心得放上来谢谢大家。
! M. d; ^: u- ~( A5 G* R
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-4 21:55 编辑 + N. V9 n3 d* k2 G7 F( W% F8 _

) e& x5 I' [& L1 Z第一. ?+ b7 m4 |' }3 C( d% A! }, ]
make 中如果没有配置文件直接make all 产生如下错误3 r. v& ~# o) K( e* q7 v
System not configured - see README
3 o% L" r5 W, ~% d, u7 B( iMakefile:327: recipe for target 'all' failed+ a8 i: R( S8 q7 \' Q
make: *** [all] Error 11 d( ^6 k% x4 ~! o( R1 `- c

1 F0 }+ ~9 ~; E3 d. k& C4 Z5 M6 t1 a- E( t
在makefile中有一句  
5 G2 g2 w7 {3 R4 K% x' z3 Fifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))7 v! ^: E/ K+ B8 L
也就是判断顶层目录/include下有没有config.mk这个文件如果有就相等如果没有就不相等
) k5 C' @# t- H% n, c" H其中wildcard 用来扩展OBJTREE 如果没有config.mk它返回为empty 如果就跟第一个条件相同
5 E% g) p$ D+ j% }; ?否则+ o# Z! j* H* v& u1 M0 h5 B9 i6 U
else8 ]6 j) v& s. G3 [& U/ W
all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \2 N5 z, x. I6 w( v7 H* O' I2 T
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
2 b8 P; e4 J4 m4 q! J$ @$(SUBDIRS) version gdbtools updater env depend \: n% W9 U  P- b, M/ f
dep tags ctags etags $(obj)System.map:
6 H& H7 w) L% b" q# u5 H        @echo "System not configured - see README" >&2
! M; f' j; m$ R1 B        @ exit 1
3 _0 O$ ^2 q0 ?$ W7 @7 @$ R+ m$ t: U- y

" M, m5 g0 {' X5 T5 Z* q
) A/ B, c; P$ c8 S6 u* @! d5 T# x: u
- |& A' L- @& ?& p9 M& `5 Q
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:02 编辑
% f8 ]4 w, ?+ p$ O2 K1 Q. x6 B! r3 h: _- x4 L# b
i686的解释:& T# U1 Z8 J8 Y) ?  U; _; ~
i代表intel系列的cpu 。
0 _$ ?2 H/ p0 d+ G6 U  D  d8 A0 I; T/ v+ M
386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
6 N, V+ N6 R% ^% z( z2 T2 K% }
5 C. G8 B4 z1 L& c  |$ i, fi586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级; $ U; G9 C$ A9 `; Z0 `, R1 N; g0 [4 T

4 B: H4 }) l+ li686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!- N, {- f  G' q+ G5 u, C2 I# I
x86_64的解释:$ l" d/ Z0 b2 F# ]) Q

: s' b  M! {3 c$ ^& I7 o而x86_64就是64位的x(代表不确定。可以是3、4、5、6、)86,是个统称,如果是i686_64也是属于x86_64的。4 |0 p( _9 v% I0 L8 p" j

/ H  P/ V" |4 |' _- p# Z+ _- M- Y8 c% `- z7 p8 L& q8 g

$ C5 \' d% R5 x  t2 C, a+ V0 _! o+ k4 G, ?0 h+ i; R7 J/ [
sed 置换方法
3 B; m9 b5 h9 D$ m4 I8 B6 f* K# t9 j* L* E
archi = $(shell uname -m | sed  s/i.86/i386/)
& [/ k5 D0 A8 E: r! F* F$ P#i.86 跟i686% t- K1 x% o  V% R" ?. o

; ?2 Z: `0 ^) c4 x. T/ b
; c* Y' w7 P! L" N  G) O. \all:8 S6 V9 Z  \5 g3 X: ~" J
        @echo $(archi)
- e' @+ J& m3 \$ o  a$ k
  \$ x6 y3 m8 s" B' B& q
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:55 编辑 + d! m3 O7 z2 m
- o+ R' U" x0 c" v! L" _0 D
关于文件是否存在的问题,在语句4 Y4 M6 u5 w1 \( V5 @0 P- n
ifneq($(curdir)/xxx.mk,$(wildcard $(CURDIR)/xxx.mk))* M5 x, S$ P9 h' I
在展开第一语句中有或没有都会展开CURDIR/xxx.mk. S+ ]  X/ ^6 r: S! [1 {# O0 G' H. Q
而wildcard中有就展开没有就返回为空。8 M* L7 D& z% {5 p! N
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
reserve
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
reserve
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
reserve
 楼主| 发表于 2017-5-4 19:32 | 显示全部楼层
reserve

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-28 09:07 , Processed in 0.046443 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表