news 2026/4/23 17:25:54

交叉编译(一)

作者头像

张小明

前端开发工程师

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/4/23 14:35:30

‌协议安全审计:NLP解析SSL/TLS握手漏洞的自动化扫描器‌

SSL/TLS握手漏洞的自动化防御新趋势‌ 在数字化时代&#xff0c;SSL/TLS协议作为网络通信的基石&#xff0c;其握手过程的安全漏洞可能引发数据泄露或中间人攻击。例如&#xff0c;握手阶段涉及premaster secret的交换&#xff0c;若版本号被篡改&#xff0c;攻击者可降级加密…

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

进阶篇:从手写深拷贝到 std::string 与移动语义(Rule of Five)

在上一篇《C 浅拷贝 vs 深拷贝&#xff1a;从 0 开始一步一步讲透&#xff08;Student 示例含判断方法&#xff09;》里&#xff0c;我们已经明确了结论&#xff1a; 默认拷贝&#xff08;编译器生成&#xff09;对资源类通常是浅拷贝资源类想安全&#xff0c;就要自己实现深拷…

作者头像 李华
网站建设 2026/4/23 15:29:48

(2026年最新)AI大模型学习路线图详解:从入门到精通,你的完整学习指南!_大模型学习路线

大模型技术已经成为推动人工智能发展的关键力量。无论你是初学者还是有经验的开发者&#xff0c;想要掌握大模型应用&#xff0c;都需要遵循一定的学习路线。 从核心技术解析到模型微调与私有化部署&#xff0c;逐步深入大模型应用的世界。 这份学习路线图详细的介绍了那年每…

作者头像 李华
网站建设 2026/4/23 17:13:33

想让AI更智能?收藏这篇,小白也能学会调用工具的Agent智能体!

本文介绍了AI智能体&#xff08;Agent&#xff09;的概念和实现方式&#xff0c;通过ReAct框架让AI能够主动调用工具解决问题。文章详细讲解了如何使用LangChain4j定义工具、创建Agent接口和实例&#xff0c;并通过实战案例展示了全能助手的多工具协作能力。此外&#xff0c;还…

作者头像 李华
网站建设 2026/4/22 8:22:56

【课程设计/毕业设计】基于SpringBoot框架的食品安全服务系统基于springboot的食品安全监测及风险预警系统的设计与实现【附源码、数据库、万字文档】

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

作者头像 李华
网站建设 2026/4/23 16:04:27

windows10 pip安装ete4报错

**ete4&#xff08;Environment for Tree Exploration v4&#xff09;**是生物信息学领域核心的Python库&#xff0c;专注于系统发育树&#xff08;进化树&#xff09;的构建、操作、可视化及分析&#xff0c;广泛应用于进化生物学、生态学、流行病学、基因组学等研究场景。win…

作者头像 李华