当前位置: 首页 > news >正文

交叉编译(一)

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
http://www.jsqmd.com/news/366667/

相关文章:

  • 如何在.NET WebForm中实现网页端大文件的分片断点续传?
  • 当代码门禁遇上大模型,测试效率的革命性跃迁
  • 综述不会写?AI论文软件 千笔写作工具 VS WPS AI,本科生专属神器!
  • 2026年地坪生产厂家最新推荐排行榜:聚焦国内优质厂商,助力选购高性价比金刚砂/环氧/混凝土/球场用地坪 - 深度智识库
  • DiffPure技术机制与测试工具链整合方案
  • 新手也能上手 9个一键生成论文工具测评:自考毕业论文+格式规范全攻略
  • 2026年主流GEO服务商深度评测:技术代差之下,企业如何选择? - 品牌策略主理人
  • 2026 南宁英语雅思培训教育机构推荐、雅思培训课程中心权威口碑榜单 - 苏木2025
  • 双引擎驱动:测试资产复用的技术革命与落地实践
  • 进阶篇:从手写深拷贝到 std::string 与移动语义(Rule of Five)
  • ‌协议安全审计:NLP解析SSL/TLS握手漏洞的自动化扫描器‌
  • 贵州工业地坪解决方案指南 固化剂/环氧/金刚砂地坪优选 贵州惠博特专属定制 - 深度智识库
  • LoRa智能网关在智慧城市市政设施监控中的功能作用
  • 2026精选10家高清壁纸素材网站推荐,商用正版适配电商、设计全场景 - 品牌2026
  • 轻量级GAN在MEC资源争用测试中的技术突破与行业实践
  • 2026四川抗裂砂浆厂家哪家好,腻子粉、找平石膏、瓷砖胶、自流平一站式解析 - 深度智识库
  • 百万级流量下的数据库突围:分库分表从原理到实战全解析
  • Mac 和 Windows 都能用!这款神器让水印添加快到飞起
  • 贵州工业地坪施工指南:专业固化剂地坪、金刚砂地坪一站式服务商推荐 - 深度智识库
  • day82(2.10)——leetcode面试经典150
  • 实测才敢推 8个降AIGC工具:继续教育降AI率全维度测评
  • AI 对话也要看广告?OpenAI 正式测试 ChatGPT 广告系统
  • WebP 转 JPG 在线工具怎么选?几款实用网站对比推荐
  • 2026 南昌英语雅思培训教育机构推荐|雅思培训课程中心权威口碑榜单 - 老周说教育
  • 免费好用!2026AI 论文工具排行榜,新手直接抄作业
  • R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表 - 教程
  • 成都、天津、大连、珠海:养老工作分析 by Claude Opus 4.6
  • OpenCSG(开放传神)赋能软件研发:某金融软件公司用AI Coding把研发效率提升40%
  • 2026 AI论文工具黑马榜!实测后,真正好用的都在这
  • 贵州工业地坪一站式解决方案指南,专业服务看贵州惠博特装饰材料有限公司 - 深度智识库