news 2026/5/14 2:28:50

交叉编译(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
交叉编译(一)

1. Makefile的含义

Makefile 是一种用于管理和自动化软件编译过程的文本文件,也就是说Makefile 类似是“自动化的做菜食谱”——告诉电脑用哪些原料(源文件,语句)、按什么步骤(编译/链接命令),一键做出可执行程序。

格式:# <目标>: <前置依赖>

# <需要执行的命令>

目标:需要生成的目标文件名。

前置依赖:生成目标文件需要的依赖文件列表

命令:执行的命令。

1.1 例子(一)

#这是一个makefile TARGET = hello #这是延迟赋值 CC := gcc #直接赋值 # := 和 =的区别 # TARGET1 := $(CC) $(TARGET) #结果是gcc hello TARGET1 = $(CC) $(TARGET) #结果是gcc -g hello CC ?= g++ #如果前面没有定义,那么就定义。如果有定义了,那就不定义。 # CC += -g #追加 #变量替换 SRC = hello.c OBJ = $(SRC:.c=.o) debug: # @echo "hello world" # echo $(TARGET1) echo $(OBJ) echo $(SRC) #hello:$(OBJ) # @gcc -o hello hello.c #Makefile会生成 hello.o 文件是因为 GNU Make的隐式规则(implicit rules) 在起作用 #会自动执行生成.o文件 # $(CC) -o $(TARGET) hello.c # @./hello $(TARGET):$(SRC) # 没有触发隐式规则的条件 # 目标依赖的是 .c 文件,不是 .o 文件 $(CC) -o $@ $^ #关键点:Make的隐式规则只有在: #目标需要 .o 文件作为依赖 #没有显式的 .o 文件生成规则时 #才会自动触发 %.c -> %.o 的隐式规则 complie:$(TARGET) # 清理操作 clean: @rm hello # 伪目标就是给 make 的“动作指令”加保险,让它们永远可执行,不与真实文件重名冲突。 .PHONY:clean complie

1.2 例子(二)

#这是一个makefile TARGET = hello #这是延迟赋值 CC := gcc #直接赋值 # := 和 =的区别 # TARGET1 := $(CC) $(TARGET) #结果是gcc hello # TARGET1 = $(CC) $(TARGET) #结果是gcc -g hello CC ?= g++ #如果前面没有定义,那么就定义。如果有定义了,那就不定义。 # CC += -g #追加 #变量替换 # SRC = hello.c # SRC = $(wildcard ./src/*.c) # 用于通配符展开,返回对应的列表 SRC = $(shell find . -name *.c) # OBJ = $(SRC:.c=.o) # OBJ = $(patsubst %.c,%.o,$(SRC)) #patsubst替换 # OBJ = $(subst .c,.o,$(SRC)) # TARGET = $(subst .c,,$(SRC)) # TARGET1 = $(patsubst ./src/%,./obj/%,$(TARGET)) TARGET := $(patsubst ./src/%,./obj/%,$(subst .c,,$(SRC))) TARGET_DIR := $(dir $(TARGET)) debug: # @echo "hello world" # echo $(TARGET1) # echo $(OBJ) echo $(SRC) echo $(TARGET) echo $(TARGET_DIR) # echo $(TARGET1) #hello:$(OBJ) # @gcc -o hello hello.c #Makefile会生成 hello.o 文件是因为 GNU Make的隐式规则(implicit rules) 在起作用 #会自动执行生成.o文件 # $(CC) -o $(TARGET) hello.c # @./hello $(TARGET):$(SRC) # 没有触发隐式规则的条件 # 目标依赖的是 .c 文件,不是 .o 文件 mkdir -p $(TARGET_DIR) $(CC) -o $@ $^ #关键点:Make的隐式规则只有在: #目标需要 .o 文件作为依赖 #没有显式的 .o 文件生成规则时 #才会自动触发 %.c -> %.o 的隐式规则 complie:$(TARGET) clean: # @rm hello @rm -rf $(TARGET_DIR) .PHONY:clean complie

1.3 例子(三)

#这是一个makefile TARGET = hello #这是延迟赋值 CC := gcc #直接赋值 # := 和 =的区别 # TARGET1 := $(CC) $(TARGET) #结果是gcc hello # TARGET1 = $(CC) $(TARGET) #结果是gcc -g hello CC ?= g++ #如果前面没有定义,那么就定义。如果有定义了,那就不定义。 # CC += -g #追加 #变量替换 # SRC = hello.c # SRC = $(wildcard ./src/*.c) # 用于通配符展开,返回对应的列表 SRC = $(shell find . -name *.c) # OBJ = $(SRC:.c=.o) # OBJ = $(patsubst %.c,%.o,$(SRC)) #patsubst替换 # OBJ = $(subst .c,.o,$(SRC)) # TARGET = $(subst .c,,$(SRC)) # TARGET1 = $(patsubst ./src/%,./obj/%,$(TARGET)) TARGET := $(patsubst ./src/%,./obj/%,$(subst .c,,$(SRC))) TARGET_DIR := $(dir $(TARGET)) INCLUDE := /usr/include \ /usr/local/include I_FLAG := $(foreach var,$(INCLUDE), -I$(var)) # -I/usr/include -I/usr/local/include #条件判断 ifndef CC CC += -g else CC := gcc endif debug: # @echo "hello world" # echo $(TARGET1) # echo $(OBJ) echo $(CC) echo $(SRC) echo $(TARGET) echo $(TARGET_DIR) # echo $(TARGET1) echo $(suffix src/foo.c src-1.0/bar.c hacks) echo $(basename src/foo.c src-1.0/bar.c hacks) echo $(addsuffix .c,foo bar) echo $(addprefix src/,foo bar) echo $(I_FLAG) #hello:$(OBJ) # @gcc -o hello hello.c #Makefile会生成 hello.o 文件是因为 GNU Make的隐式规则(implicit rules) 在起作用 #会自动执行生成.o文件 # $(CC) -o $(TARGET) hello.c # @./hello $(TARGET):$(SRC) # 没有触发隐式规则的条件 # 目标依赖的是 .c 文件,不是 .o 文件 mkdir -p $(TARGET_DIR) $(CC) -o $@ $^ $(I_FLAG) #关键点:Make的隐式规则只有在: #目标需要 .o 文件作为依赖 #没有显式的 .o 文件生成规则时 #才会自动触发 %.c -> %.o 的隐式规则 complie:$(TARGET) clean: # @rm hello @rm -rf $(TARGET_DIR) .PHONY:clean complie
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 2:27:33

【春招必看】一次性入门openlayers和cesium两个地图开发框架

春节过后&#xff0c;即将迎来26年毕业季&#xff0c;选择就业的同学&#xff0c;如果还没拿到offer&#xff0c;就要开始准备26年春招了。如果想找WebGIS相关的岗位&#xff0c;可以通过招聘信息&#xff0c;了解到企业的具体要求。其中&#xff0c;openlayers和cesium有多重要…

作者头像 李华
网站建设 2026/5/10 5:39:18

LLM 联网搜索,到底是咋回事?

0x0 序 近段时间 DeepSeek 的服务火遍了全网&#xff0c;无论是使用网页还是使用 App 都能享受到 深度思考 联网搜索 的至尊体验。奈何免费的东西往往是需要排队的&#xff0c;从年开始 DeepSeek 的服务就一度处于不可用状态&#xff0c;就算是年后&#xff0c;网络搜索也是经…

作者头像 李华
网站建设 2026/5/1 17:54:45

万字详解大模型推理加速核心原理丨茶思AI推理

本期聚焦】万字详解大模型推理加速分形原理&#xff0c;重塑资源优化体系&#xff1b;月之暗面发布Kimi K2.5&#xff0c;实现AI推理从“单体思考”到“集群作战”进化&#xff1b;Hyper3D Rodin Gen-2 Edit上线&#xff0c;3D生成推理迈入可编辑时代&#xff1b;人大联合团队发…

作者头像 李华
网站建设 2026/4/30 23:31:14

Java毕设项目:基于springboot的食品安全监测及风险预警系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/12 17:54:49

刷爆kafka经典面试题100道覆盖全场景!

1:Kafka 是什么?它的主要应用场景有哪些? kafka是什么? Kafka是一种分布式流事件处理平台,最初由领英开发开发,现在是 Apache 基金会的一部分。编写语言是主要是Scala和一些底层和性能模块Java编写。 它的核心功能主要包括消息队列、流处理和数据集成。…

作者头像 李华