一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 4564|回复: 7

MAKEFILE 学习心得

[复制链接]
发表于 2017-5-4 18:49 | 显示全部楼层 |阅读模式
正所谓用之于网络还之于网络,从完全不会到略有所成真是一波三折,学会从网络查找所要的东西的重要性。
( P8 C% G+ z$ ^: `" W( ZMAKEFILE 学了差不多半个月了,一值没有放弃,因为真的有用。9 [9 `" j0 M! s" n4 g$ d( L' n
学MAKEFILE还是看UBOOT的MAKEFILE ,因为以后不管是ARM也好MIPS 也好都是UBOOT 行头用的就是MAKEFILE生成
& [1 T, s; h/ O& h+ @1 A* l淘宝上买回来的学习板人家都移植好了你可以不看,但会修改你想要的功能去掉不要的功能都是非常重要的,
- C5 Z. b9 e! \3 p; b, J  D3 r9 j如果你是搞应用的可以不用学,但如果你是一个比较关心底层的那还是学一下为好,不管怎样看你自己的想法0 T' G8 U' e( Q- K) }, v
在这我会不定时将学到的一点心得放上来谢谢大家。
0 W" L4 M. ^; o+ U( w: c
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-4 21:55 编辑
; `& u5 d1 W+ Y4 {% b0 O" f1 }1 h) l1 A8 \1 e
第一
( a+ J) q2 x* [( u' b  Vmake 中如果没有配置文件直接make all 产生如下错误
' t2 s: w& a1 _2 W& {System not configured - see README1 ^: _$ S2 {( k! e
Makefile:327: recipe for target 'all' failed
9 _4 S# K: z( A/ z8 b5 l& lmake: *** [all] Error 1$ Q0 K5 N# g. D, u. E8 n
, w/ w+ {6 I2 n. m+ E$ g
: n1 G6 ^# u" y+ l
在makefile中有一句  
0 U6 J6 U0 n! N" q, W0 Yifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))- {: X' E4 V& [* `+ t
也就是判断顶层目录/include下有没有config.mk这个文件如果有就相等如果没有就不相等! ]* z$ N. F. u- ^- q( z* Q# i
其中wildcard 用来扩展OBJTREE 如果没有config.mk它返回为empty 如果就跟第一个条件相同' _4 h( x; K$ p4 |5 N  f! ^
否则7 ^% t/ _8 {2 c7 J0 j+ d
else
+ J/ Q- R" g/ }8 ^  F7 G  o/ \) kall $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \% N" B/ [' q! m
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
8 J3 E% p2 ]) s' w1 K$(SUBDIRS) version gdbtools updater env depend \  U/ I# n( O0 `( X5 ~" U7 y
dep tags ctags etags $(obj)System.map:
+ `' W/ R7 h, _5 g8 _7 M        @echo "System not configured - see README" >&2( l& U  b7 l" L# e" h, o
        @ exit 1
( v# {' x. r3 B* y# |
9 l( @3 c: O% y! e3 |) z1 z* @4 |2 {. x! a; Y+ {5 I0 c
, v9 X7 r4 H) g2 q$ B
7 m. s, V) S; ]5 L; g
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:02 编辑 8 m% D5 X1 [. Y7 G. D* Q1 ]1 X
( z, z) v6 s3 t3 q# v0 {* \
i686的解释:
% M: f2 ]' \# F; ]# Ui代表intel系列的cpu 。* E# p' |/ H# o1 _4 V6 \: y

1 }4 \) z+ O) V6 G386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
. G0 A, c$ ?+ o/ P2 h# H# N
! A" ~9 O+ E) w. L  ui586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级;
% P5 v. e/ J0 s, @8 x+ x
3 o" j4 v" [% r+ c4 T) Y3 l# v7 Bi686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!
& e- }! B5 C& }) Y$ I; g3 Q' e, I) j, {x86_64的解释:
& i# C$ ~7 B! E0 g8 g* X8 \9 L
4 X' q/ I9 C$ u6 w% x7 P4 R4 d) O而x86_64就是64位的x(代表不确定。可以是3、4、5、6、)86,是个统称,如果是i686_64也是属于x86_64的。
- s. r+ s$ D- }( s- Q0 M$ T; Q/ M9 s( q

, ]2 l; m% P) L6 T
. G; H7 n; U% J6 i+ ~9 K: r# R6 V$ Q6 w1 X4 ^; a: Z6 n
sed 置换方法
* f" h' I9 O0 O1 J8 X  H2 k
$ P, B, E: n. varchi = $(shell uname -m | sed  s/i.86/i386/)' W  ]. u% ?0 F% _. v
#i.86 跟i6862 e" S& o8 T# |5 W

, w- [7 K/ B+ X) @0 A
& R& G1 x# J# A: ~. w) q+ _  Kall:
5 h& P) Q2 y8 H( |' P        @echo $(archi); Z( `& @* o2 c# T
+ O, G$ H0 @$ @6 H, C4 F4 G- o3 `
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:55 编辑
, n: ~2 `7 b6 k$ i+ r2 i% |3 h# }5 G# Z) I6 R; E1 R, G
关于文件是否存在的问题,在语句
$ |4 y) U4 Y. |6 `ifneq($(curdir)/xxx.mk,$(wildcard $(CURDIR)/xxx.mk))0 E, f/ O% r# X1 D
在展开第一语句中有或没有都会展开CURDIR/xxx.mk
; i) d  B8 F. }0 }7 Y$ R而wildcard中有就展开没有就返回为空。
6 o0 n* h1 O0 N7 i! p, _( O/ P
回复

使用道具 举报

 楼主| 发表于 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-8-20 08:59 , Processed in 0.033463 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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