一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

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

MAKEFILE 学习心得

[复制链接]
发表于 2017-5-4 18:49 | 显示全部楼层 |阅读模式
正所谓用之于网络还之于网络,从完全不会到略有所成真是一波三折,学会从网络查找所要的东西的重要性。) }; M' v, v5 r7 T* a
MAKEFILE 学了差不多半个月了,一值没有放弃,因为真的有用。( Q& ^0 ~- y. a4 O. K
学MAKEFILE还是看UBOOT的MAKEFILE ,因为以后不管是ARM也好MIPS 也好都是UBOOT 行头用的就是MAKEFILE生成
$ @! a" o  m" ?  N* j& v' o/ c- I# F淘宝上买回来的学习板人家都移植好了你可以不看,但会修改你想要的功能去掉不要的功能都是非常重要的,3 \# F" i# X( X* o/ }
如果你是搞应用的可以不用学,但如果你是一个比较关心底层的那还是学一下为好,不管怎样看你自己的想法
" x  ?5 K* ?& D8 N+ P在这我会不定时将学到的一点心得放上来谢谢大家。
" K7 ]: e" d1 w
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-4 21:55 编辑   j2 B) M- ?) ~) o5 K5 V/ |% y
# i( {) d4 m4 v
第一) a1 W+ \- K, b, u$ W/ b& U# Y2 z
make 中如果没有配置文件直接make all 产生如下错误
! n5 Z! ^0 }, L0 cSystem not configured - see README$ O; e, w/ L( U( n0 @( y3 G
Makefile:327: recipe for target 'all' failed8 x. L7 g7 M) G" N
make: *** [all] Error 1% v4 x. N0 d- r- d1 ]+ v" F! i! p4 s
2 S+ f9 k- W0 Z5 H
2 r9 j- v8 Z6 u. E5 a5 }
在makefile中有一句  
& P$ v; o* i; y) P# [ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))9 l! `. y- ^8 P( Y1 T' U) Q1 {
也就是判断顶层目录/include下有没有config.mk这个文件如果有就相等如果没有就不相等
1 p) a' k5 ^9 D* @/ d其中wildcard 用来扩展OBJTREE 如果没有config.mk它返回为empty 如果就跟第一个条件相同3 t' q8 @$ O- y9 O
否则
( e6 [7 U6 m4 R% P6 m* m  F/ \/ nelse0 ^# ~+ `) V" R. g( `$ f( F
all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \) y: `  T6 m/ Y" u4 z
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \+ }0 ?/ W$ `& v, ^2 d2 ]
$(SUBDIRS) version gdbtools updater env depend \
" r0 q8 D# T% ~, c( U/ t$ U/ q, Wdep tags ctags etags $(obj)System.map:- t$ s! l/ K1 m! f' X& Q$ |* h. W
        @echo "System not configured - see README" >&2
+ D1 \$ z8 i- c2 s, Y        @ exit 1
9 i& @: b% x  S4 e* G0 N3 j8 K8 F; J" ]: u+ G
4 Q8 |. y! `0 g+ e" b

6 y: e8 _2 e; t8 k; F  w4 Q  ]) B6 i8 P2 q5 v4 ]9 n0 t9 {
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:02 编辑 . G+ g9 N* k4 p1 ?
9 c' i! E  ~" \( J( D+ a
i686的解释:
  q) T8 P3 E8 O2 R% ~i代表intel系列的cpu 。
# b+ Y" c8 D/ K
! y+ E* z# `- }) [- {8 g( s4 u386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
1 t0 P' j0 A  c: I, h' e+ L# l! Z& H2 w& T# {+ p
i586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级;
5 O6 ~& D. ]0 x" g) X+ Y* i- I* H' ]4 H( ^5 ~' q3 v2 P
i686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!
/ r' i7 `$ ~1 X0 a, |, }3 r  L) Hx86_64的解释:/ X, h3 C0 R' y  t

0 B; k6 J3 r6 }# h而x86_64就是64位的x(代表不确定。可以是3、4、5、6、)86,是个统称,如果是i686_64也是属于x86_64的。; X5 m3 w- P5 _5 ?, F

1 K( \. T0 m0 i! i# W
' j# ?; C* L: O0 R2 s
0 t7 w* |1 Y1 ^' ^0 G% `5 t
3 U$ X! `, c/ P1 n, z) \sed 置换方法
1 G4 L3 f; B# c
7 j2 H: r9 T" U& Warchi = $(shell uname -m | sed  s/i.86/i386/)
) \5 k! X9 W) f) b3 [! |#i.86 跟i686
4 r0 N+ h! W! T2 O* {
4 }/ ^: W8 n! D  X# J* Q7 T1 A$ \
all:
! u6 }  S" Z8 l        @echo $(archi)% ^- ^5 x0 I1 _- {
0 L6 Z/ u6 f& v4 u
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:55 编辑 & e% X! w8 J5 J& Z7 v& \  ~
/ a( J5 J1 @% A5 t7 a9 E
关于文件是否存在的问题,在语句0 z& B* K# r: y& K5 e# o4 z# ]
ifneq($(curdir)/xxx.mk,$(wildcard $(CURDIR)/xxx.mk))9 p* ~$ T7 S  ^$ K
在展开第一语句中有或没有都会展开CURDIR/xxx.mk+ K% w" v0 Q! ]' ~2 E
而wildcard中有就展开没有就返回为空。0 h* D2 J. ?8 p8 X
 楼主| 发表于 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, 2024-4-19 02:28 , Processed in 0.060463 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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