一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4763|回复: 7

MAKEFILE 学习心得

[复制链接]
发表于 2017-5-4 18:49 | 显示全部楼层 |阅读模式
正所谓用之于网络还之于网络,从完全不会到略有所成真是一波三折,学会从网络查找所要的东西的重要性。
: B7 a9 W; r( N6 RMAKEFILE 学了差不多半个月了,一值没有放弃,因为真的有用。
4 c! n) S& t% R7 p# o4 W学MAKEFILE还是看UBOOT的MAKEFILE ,因为以后不管是ARM也好MIPS 也好都是UBOOT 行头用的就是MAKEFILE生成
$ z) i5 s+ m% e6 ^/ v淘宝上买回来的学习板人家都移植好了你可以不看,但会修改你想要的功能去掉不要的功能都是非常重要的,
$ P1 P% }) x+ U3 R' f! ?; i  p如果你是搞应用的可以不用学,但如果你是一个比较关心底层的那还是学一下为好,不管怎样看你自己的想法' G: D  E+ l1 I( `
在这我会不定时将学到的一点心得放上来谢谢大家。
1 W5 ^6 f7 Z, a! g& ?8 h: L* N
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-4 21:55 编辑
! J4 z& d+ U+ L; l
; P/ w2 z7 C3 ^; c# c# q第一* l: C7 |7 h# s3 \
make 中如果没有配置文件直接make all 产生如下错误
5 X. M8 o$ A" Q& K- O9 aSystem not configured - see README
; O3 t4 @0 Y9 H! K4 V: c/ U8 p: tMakefile:327: recipe for target 'all' failed
: g3 j+ f! m+ o' o' B; wmake: *** [all] Error 1& C* w- q, n" j& Q; V) u8 Y

; J' D- [; A( G& {& A
) N7 j+ Y( N' U9 O在makefile中有一句    W: h5 o- q% S# G
ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))
0 I3 |6 t. T" W' @- V7 n( ?7 f也就是判断顶层目录/include下有没有config.mk这个文件如果有就相等如果没有就不相等7 e  W( ^* X" B0 E" z  w; d
其中wildcard 用来扩展OBJTREE 如果没有config.mk它返回为empty 如果就跟第一个条件相同
7 U9 I. g( F- E8 c; |( O否则
2 ?- Q4 @8 w' S1 X4 b% G4 R; X- \else( n6 u" ?( \! g  ?
all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \" y4 s, W& u( h' J2 l9 d
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \* i+ u2 g* b, U
$(SUBDIRS) version gdbtools updater env depend \
+ b. g* V( L/ n7 P. \dep tags ctags etags $(obj)System.map:
7 }5 C( Q- F: S6 h' t" y  a" g* ^        @echo "System not configured - see README" >&2
% J' A; o: N# v) _2 C        @ exit 13 w+ M/ s% O* Z( n. T% o3 O$ T
( m- F# e1 _- X( W4 z

1 u; B0 H3 g1 L, G% e; `, Q% J( O; w% Q5 ]) {' b

0 r% j& z) M" |/ p6 J
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:02 编辑
8 _+ L# A/ Y8 U. T6 v; K
! P6 ^3 n( N& X8 m5 ?i686的解释:
$ k& T8 f' O) W9 p8 N3 Yi代表intel系列的cpu 。
5 o4 U, g  e- }9 ]( Z7 y1 r" F+ B1 a+ B' G
386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
* U7 x/ L* s2 j. [6 a
8 \6 r6 @  K: b8 o$ h# A' Ai586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级; 8 Q+ P; k$ g0 X) F

& G+ C3 l- w6 M5 Z. C. zi686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!
/ D+ n3 z. L. [x86_64的解释:
1 j1 D+ L+ y- o1 [, U! a6 L6 N0 z9 w6 [% m" g# t( X
而x86_64就是64位的x(代表不确定。可以是3、4、5、6、)86,是个统称,如果是i686_64也是属于x86_64的。: i* ?4 @" N! C

9 P+ ]* S+ ]7 U% `7 Y5 v' |( Y. t1 q- \$ R5 |* Y

! y9 {) |* ^: W" ]! ]# I% g# a: p, |9 {  \
sed 置换方法 & @* D' x9 H: ]; A
' I  {' D' o8 l  `
archi = $(shell uname -m | sed  s/i.86/i386/)
7 W6 ?* n, q4 V) r+ O#i.86 跟i6865 F" ^7 ?, F4 q" T& T

  `* c% B8 j! b6 F/ C
3 |4 C" s/ T5 x8 ?all:( `2 S3 }; T; m  E7 b! O, s
        @echo $(archi)
# T) X- @2 i0 m" B4 ^9 O: T
: P# |5 d* ~& p, N8 g# z0 `
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:55 编辑
# T3 k( D& ^& l, b% n! c$ ]% Z8 [+ T( e6 M% d
关于文件是否存在的问题,在语句* R- _, W8 p* j6 Q5 p: {
ifneq($(curdir)/xxx.mk,$(wildcard $(CURDIR)/xxx.mk))
2 p% t# Q# B& ]" r: k在展开第一语句中有或没有都会展开CURDIR/xxx.mk
- D4 z9 Y- s7 |而wildcard中有就展开没有就返回为空。
& Q0 U- l, Z# R" t7 Q
回复

使用道具 举报

 楼主| 发表于 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|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-28 20:10 , Processed in 0.039220 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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