Makefile高階篇之LD

2021-09-29 11:48:24 字數 1908 閱讀 4230

如果沒有特別指定需要使用的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 去空格...