如果沒有特別指定需要使用的ld檔案,連線階段就會使用gcc 的預設ld檔案;
如果需要使用特別的ld 檔案,可以使用如下命令:
arm-linux-ld -tlink.lds sample1.o sample2.o main.o -o hello.elf
arm-linux-objcopy -o binary hello.elf hello
```## ld 使用方法
```c
cc = gcc
prom = hello
dir=
($shell pwd)
inc_dir = $(dir)
/inc
src_dir = $(dir)
/src
obj = $(pathsubst $(src_dir)/%
.c, $(src_dir)/%
.o, $(wildcard $(src_dir)/%
.c))
$(prom)
: $(obj)
$(cc)
-o $(prom) $(obj)
%.o:
%.c $(deps)
$(cc)
-i$(inc_dir)
-c $<
-o $@
.phony : clean
clean:
rm -rf $(obj) $(prom)
如果我們想使用我們自己指定的ld 檔案,該如何操作呢?
prom = hello
dir=
($shell pwd)
inc_dir = $(dir)
/inc
src_dir = $(dir)
/src
obj = $(pathsubst $(src_dir)/%
.c, $(src_dir)/%
.o, $(wildcard $(src_dir)/%
.c))
output = $(dir)
/out
link_dir = $(dir)
/toolchain/bin/arm-none-eabi-
link_ld = $(link_dir)
/ldlink_objcopy = $(link_dir)
/objcopy
link_ldfile = $(dir)
/link.ld
cc = $(link_dir)
/gcc
all: clean $(output) $(obj_dir) $(prom)
$(output)
: mkdir $@
$(obj_dir)
: mkdir $@
$(prom)
: $(obj)
$(link_ld)
-t$(link_ldfile ) $(obj)
-o hello.elf
$(link_objcopy )
-o binary -s hello.elf hello.bin
$(obj_dir)/%
.o: $(src_dir)/%
.c $(cc)
-i$(inc_dir)
-c $<
-o $@
.phony : clean
clean:
rm -rf $(obj)
rm -rf %
(output)
/*
對上述的hello.elf 做一下簡單的說明:
hello.elf: 用來描述hello.bin 檔案的section 和 segment 資訊。
elf檔案結構描述
如何自己編寫Makefile 高階篇
上篇文章介紹了makefile的編寫方法,相信大家有所收穫。本文繼續深入makefile,看看還有哪些高階用法可以大大提公升我們的工作效率。本文是接著上篇博文 如何自己編寫makefile的,因此如果沒有看過上篇文章的,建議先閱讀一遍,以便更好地理解本文。在規則中使用萬用字元 乙個簡單的例子 cle...
Linux之Makefile(變數高階用法)
我們可以替換變數中的共有的部分,其格式是 var a b 或是 其意思是,把變數 var 中所有以 a 字串 結尾 的 a 替換成 b 字串。這裡的 結尾 意思是 空格 或是 結束符 還是看乙個示例吧 foo a.o b.o c.o bar foo o c 這個示例中,我們先定義了乙個 foo 變數...
Makefile語法高階
迴圈條件 其他makefile基本語法 呼叫子makefile 類似函式 關鍵字有 ifeq,ifneq,ifdef,ifndef ifeq cc gcc cc o else cc o xx xx endif函式 含義 subst 字串替換函式 patsubst 模式字串替換函式 strip 去空格...