一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 5412|回复: 7

MAKEFILE 学习心得

[复制链接]
发表于 2017-5-4 18:49 | 显示全部楼层 |阅读模式
正所谓用之于网络还之于网络,从完全不会到略有所成真是一波三折,学会从网络查找所要的东西的重要性。8 Q" ^' ~+ v( S( X; Y8 ?7 \
MAKEFILE 学了差不多半个月了,一值没有放弃,因为真的有用。! Y; [  o% {4 e/ T5 c0 B4 x6 {* O
学MAKEFILE还是看UBOOT的MAKEFILE ,因为以后不管是ARM也好MIPS 也好都是UBOOT 行头用的就是MAKEFILE生成
* L  w! \( d8 N; `淘宝上买回来的学习板人家都移植好了你可以不看,但会修改你想要的功能去掉不要的功能都是非常重要的,
9 V) E9 {1 i7 q* }如果你是搞应用的可以不用学,但如果你是一个比较关心底层的那还是学一下为好,不管怎样看你自己的想法
8 ]4 u: e# r& W( V* D1 u. `在这我会不定时将学到的一点心得放上来谢谢大家。
# K9 L# Y7 G2 Z" {% Z$ f
 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-4 21:55 编辑
% d1 m) S/ [$ O* e  q: J+ q1 o! ^' c. ^- z$ r
第一
$ q2 B5 d7 a7 k6 I, \) Rmake 中如果没有配置文件直接make all 产生如下错误
" N  M5 \' h6 b" w8 ?6 O- vSystem not configured - see README
* [0 P1 g5 m9 {! OMakefile:327: recipe for target 'all' failed) e& p3 P9 n, \2 u( k
make: *** [all] Error 12 D6 J3 b0 _* X0 ?! C& x* K/ @1 ]+ l" N

. w* {9 ^4 A6 F9 E4 J3 h. C$ z3 [" t2 P, P: \- k
在makefile中有一句  1 O3 E$ @/ x( ^9 H+ o
ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))$ m4 u$ J4 ^, C: y# K
也就是判断顶层目录/include下有没有config.mk这个文件如果有就相等如果没有就不相等
$ ^( z7 g+ U' O, l2 G/ `其中wildcard 用来扩展OBJTREE 如果没有config.mk它返回为empty 如果就跟第一个条件相同3 L3 f6 M6 ]# }, Q
否则
1 R4 `( N9 F. f! T$ w8 x1 uelse
  e, U+ h. H) a0 aall $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \7 F. T+ b, S% v: v: s
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \* ~$ {& X# t0 F6 |
$(SUBDIRS) version gdbtools updater env depend \
9 ]6 e7 M' ^6 a5 ?2 @. Xdep tags ctags etags $(obj)System.map:/ f3 P( C; p& d' n
        @echo "System not configured - see README" >&2
. n0 x' N$ [' J+ D- t" Q8 v0 D        @ exit 1$ a8 t+ c+ u! U# R

* J) {# ^: B/ K1 K- @9 V
% i# `( f+ r1 n& \$ Z: v; T  m- v6 a2 w% N: B- W: W
/ N! `1 K" z7 c# f( [6 `7 R4 b
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:02 编辑 5 ~+ g$ [" Y8 |9 t1 [. {  a* ]
: T5 I. y. ^4 A, J* m9 @5 f
i686的解释:
/ c/ t! B: w% m" t" F: M! T' \5 oi代表intel系列的cpu 。' ?2 h) a. R0 t+ W9 c

$ c0 f0 n6 M$ b. G, E2 r386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
  q  o& R, t' j3 J
1 d" o9 }& \, C( b1 `$ n6 T1 li586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级;
9 ^( N2 h& g6 r" o* o1 }! b, h
( ~) J: R" m3 e: ci686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!+ Z( ]' T  L4 Q5 V; ?! ?3 m( v
x86_64的解释:
) c8 u5 O" Y' R
) }/ L8 K" F, N& V而x86_64就是64位的x(代表不确定。可以是3、4、5、6、)86,是个统称,如果是i686_64也是属于x86_64的。+ v) l& \% C' |9 R

8 B. k3 Z- J- i4 X, Z. k$ X  r+ `( y  u
. O2 F- `  [- m8 [2 R" i9 v6 H& I/ j
8 u: m/ Y3 p  z6 g9 A) d9 \; m2 A
sed 置换方法
9 U5 E0 V% J  ^2 f
% x  _* G1 g; }& Barchi = $(shell uname -m | sed  s/i.86/i386/)  |) F/ T! L* D. b% v- V
#i.86 跟i686
! z! Z5 f7 M" E: M5 g; i
& @; n/ f% E; G% ^7 `9 V5 J3 y# M  d7 {
all:
4 J2 ^% Y5 S9 l        @echo $(archi)/ N( M! N. t0 O; q. v
4 ?* s. J& p' L6 r+ ~
回复

使用道具 举报

 楼主| 发表于 2017-5-4 19:31 | 显示全部楼层
本帖最后由 kenson 于 2017-5-14 12:55 编辑 ; Y9 v6 x0 @$ B

  L8 A+ c3 j( [. f% {, e0 b关于文件是否存在的问题,在语句
! r! s$ T' a  iifneq($(curdir)/xxx.mk,$(wildcard $(CURDIR)/xxx.mk)). v- j- k7 G- S; }% ]& q
在展开第一语句中有或没有都会展开CURDIR/xxx.mk7 F0 a! Y( V) U4 [8 t( I1 `
而wildcard中有就展开没有就返回为空。$ d; j0 ?/ b3 N) i
回复

使用道具 举报

 楼主| 发表于 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, 2026-7-13 06:37 , Processed in 0.029049 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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