makefile 文件及交叉编译工具链

简介:

GNU Binutils
一般在解压后的交叉编译工具链bin目录下会有很多可执行程序工具,以不同的后缀进行区分,这些不同的后缀代表的意义如下:

ld :GNU链接器。
as :GNU汇编器。
gold:一个新的,更快的,仅ELF的链接器。
addr2line:将地址转换为文件名和行号。
ar:用于创建,修改和提取档案的实用程序。
c++filt:过滤以解编码编码的C ++符号。
dlltool:创建用于构建和使用DLL的文件。
elfedit:允许更改ELF格式文件。
gprof:显示分析信息。
nlmconv:将目标代码转换为NLM。
nm:列出目标文件中的符号。
objcopy:复制并转换目标文件。
objdump:显示目标文件中的信息。
ranlib:生成指向档案内容的索引。
readelf:显示来自任何ELF格式对象文件的信息。
size:列出的对象或归档文件的部分的尺寸。
strings:列出文件中的可打印字符串。
strip:丢弃的符号。
windmc:Windows兼容的消息编译器。
windres:Windows资源文件的编译器。


不同交叉编译工具链代表的意义

aarch64-elf:64位Armv8 Cortex-A,小端
arrch64-linux-gnu:64位Armv8 Cortex-A,小端
aarch64_be-elf: 64位Armv8 Cortex-A,大端
aarch64_be-linux-gnu:64位Armv8 Cortex-A,大端
arm-eabi:32位Armv7 Cortex-A,软浮点,低端
arm-linux-gnueabi:32位Armv7 Cortex-A,软浮点,小端
arm-linux-gnueabihf:32位Armv7 Cortex-A,硬浮点,小端
armeb-eabi:32位Armv7 Cortex-A,软浮点,大端
armeb-linux-gnueabi:32位Armv7 Cortex-A,软浮点,大端
armeb-linux-gnueabihf:32位Armv7 Cortex-A,硬浮点,大端
armv8l-linux-gnueabihf:32位Armv8 Cortex-A,硬浮点,小端


Linaro交叉编译工具链


Makefile
CROSS_COMPILE =
AS		= $(CROSS_COMPILE)as  #指定GNU汇编器
LD		= $(CROSS_COMPILE)ld   #指定gnu连接器
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar  #ar:用于创建,修改和提取档案的实用程序。
NM		= $(CROSS_COMPILE)nm   #nm:列出目标文件中的符号。

STRIP		= $(CROSS_COMPILE)strip   #strip:丢弃的符号。
OBJCOPY		= $(CROSS_COMPILE)objcopy  #objcopy:复制并转换目标文件。
OBJDUMP		= $(CROSS_COMPILE)objdump  #objdump:显示目标文件中的信息。

export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP

#获取TOP_PATH
#TOP_PATH = $(shell pwd)
#添加vpath变量
#VPATH = $(TOP_PATH)/DIR
#添加头文件自动搜索路径
#CINCLUDES = -I(TOP_PATH)/DIR

CFLAGS := -Wall -O0 -g   #$(CINCLUDES)
SAVE_TEMPS := -save-temps

LDFLAGS := 

export CFLAGS LDFLAGS

TOPDIR := $(shell pwd)
export TOPDIR
lpthread :=-lpthread
TARGET := test


 obj-y += main.o
 #obj-y += tpool.o
 #obj-y += b/
 #obj-y += cc/

all : 
	make -C ./ -f $(TOPDIR)/Makefile.build
	$(CC)  $(LDFLAGS) -o $(TARGET) built-in.o $(lpthread)


clean:
	rm -f $(shell find -name "*.o")
	rm -f $(shell find -name "*.d")
	rm -f $(shell find -name "*.i*")
	rm -f $(shell find -name "*.s")
	rm -f $(TARGET)
	rm -f $(shell find -name "core")
.PHONY:all clean 
Makefile.build
PHONY := build
build :
obj-y :=
subdir-y :=

include Makefile
__subdir-y	:= $(patsubst %/,%,$(filter %/, $(obj-y)))
subdir-y	+= $(__subdir-y)
subdir_objs := $(foreach f,$(subdir-y),$(f)/built-in.o)
cur_objs := $(filter-out %/, $(obj-y))
dep_files := $(foreach f,$(cur_objs),.$(f).d)

PHONY += $(subdir-y)
build : $(subdir-y) built-in.o
$(subdir-y):
	make -C $@ -f $(TOPDIR)/Makefile.build
built-in.o : $(cur_objs) $(subdir_objs)
	$(LD) -r -o $@ $^
dep_file = .$@.d
%.o : %.c
	$(CC)  $(SAVE_TEMPS) $(CFLAGS) -Wp,-MD,$(dep_file)  -c -o   $@  $< 
.PHONY : $(PHONY)

原文链接: https://www.cnblogs.com/daocaisheng/p/15633120.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    makefile 文件及交叉编译工具链

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/215397

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午2:47
下一篇 2023年2月13日 上午2:47

相关推荐