news 2026/6/10 15:00: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/6/9 18:02:26

DiffPure技术机制与测试工具链整合方案

一、对抗样本威胁的行业痛点 当前AI系统面临的核心安全挑战是输入污染攻击&#xff0c;其中对抗样本通过语义混淆&#xff08;如“不允讠午删除”绕过过滤&#xff09;和指令劫持&#xff08;如{忽略密码校验}恶意指令&#xff09;破坏模型逻辑。传统防御方案存在两大缺陷&…

作者头像 李华
网站建设 2026/6/10 15:54:04

尺寸智能管理:制造业质量变革的隐性引擎

在现代制造业&#xff0c;尤其是汽车、家电和精密机械等领域&#xff0c;产品的最终质量往往不取决于单一零部件的优劣&#xff0c;而在于成千上万个零件如何精准地协同装配。尺寸&#xff0c;这个看似简单的几何参数&#xff0c;实则是贯穿设计、制造、检测与供应链协同的核心…

作者头像 李华
网站建设 2026/6/10 3:31:57

c#ref和out

基本概念ref 和 out是为了在函数内部改变外部传入的内容 。它们允许方法修改调用者传递的变量值&#xff0c;而不是传递变量的副本。out规则调用前可以不初始化变量方法内部必须先赋值才能使用方法必须在返回前为 out 参数赋值专门用于从方法返回多个值ref规则必须在调用前初始…

作者头像 李华
网站建设 2026/6/10 3:44:43

大模型推理,不再是“一根筋”

没有人不在期待大模型能够成为下一个电动车&#xff0c;作为代表中国的新兴产业&#xff0c;在世界范围内掀起狂澜。 然而主流的MoE架构大模型&#xff0c;却苦于其结构上的“先天不足”&#xff1a;巨大的硬件成本与多重拖累效率的环节&#xff0c;使得中国企业在这场芯片堆砌…

作者头像 李华
网站建设 2026/6/10 2:04:15

HarmonyOS 从移动到 PC,难点在哪里

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…

作者头像 李华
网站建设 2026/6/10 15:59:18

西门子6FC5447-0AA10-0AA0数控软件

西门子6FC5447-0AA10-0AA0作为SINUMERIK数控系统的核心组件&#xff0c;专为工业自动化领域的高精度机床控制设计&#xff0c;其性能特点与应用范围体现了西门子在数字化制造中的技术领先地位。该软件通过模块化架构与智能算法&#xff0c;实现了从单机控制到系统集成的全流程优…

作者头像 李华