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

Linux[Makefile]

Makefile基础结构

  1. 规则语法
target: prerequisitescommand

target:生成的目标(如可执行文件、.o文件)

prerequisites:依赖项(源码、头文件等)

command:构建命令(必须用Tab缩进)

示例:

makefile
hello: hello.cgcc -o hello hello.c

下面是模拟gcc编译文件的过程

在这里插入图片描述

其原理类似于一个栈,通过查找依赖文件,逐个生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

变量定义与使用

@默认不回显

BIN=code
CC = gcc
SRC=code.c
FLAGS=-o
RM=rm -f
$(BIN):$(SRC)$(CC) $(FLAGS) $(BIN) $(SRC)
.PHONY:clean
clean:$(RM) $(BIN)
.PHONY:print
print:@echo $(BIN)@echo $(CC)@echo $(SRC)@echo $(FLAGS)@echo $(RM)

预定义变量:$ @(目标名//冒号左边)、$ ^(所有依赖//冒号右边)、$<(遍历依赖)用于目录里有很多个.c文件需要编译时使用
所以上面可以优化为:

BIN=code
CC=gcc
SRC=$(wildcard *.c)  #自动识别.c结尾文件
OBJ=$(SRC:.c=.o)  #自动生成.o文件
LFLAGS=-o
CFLAGS=-c
RM=rm -f
$(BIN):$(SRC)$(CC) $(LFLAGS) $@ $^
%.o:%.c# 等价于code1.o,code2.o.....:code1.c,code2.c......
$(CC) $(CFLAGS) $<  #自动遍历所有.c文件
.PHONY:clean
clean:$(RM) $(BIN) $(OBJ)

在这里插入图片描述
在这里插入图片描述

赋值方式:=(延迟展开):=(立即展开)
在这里插入图片描述
在这里插入图片描述

相关文章:

  • Vue3路由模式为history,使用nginx部署上线后刷新404的问题
  • Leetcode - 周赛448
  • PostgreSQL数据库的array类型
  • 密码工具类-生成随机密码校验密码强度是否满足要求
  • GPS定位方案
  • 使用阿里AI的API接口实现图片内容提取功能
  • three.js通过GEO数据生成3D地图
  • 2025年5月HCIP题库(带解析)
  • 基于计算机视觉的试卷答题区表格识别与提取技术
  • js var a=如果ForRemove=true,是“normal“,否则为“bold“
  • 网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南
  • 自定义SpringBoot Starter-笔记
  • 当K8S容器没有bash时高阶排查手段
  • Github上如何准确地搜索开源项目
  • (二)毛子整洁架构(CQRS/Dapper/DomianEvent Handler)
  • 8.软考高项(信息系统项目管理师)-沟通管理
  • 作为主动唤醒的节点,ECU上电如何请求通讯
  • String、StringBuilder、StringBuffer的区别
  • 翻转二叉树(简单)
  • 使用原生javascript手动实现一个可选链运算符
  • 碧桂园服务:拟向杨惠妍全资持有的公司提供10亿元贷款,借款将转借给碧桂园用作保交楼
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现2025年的5%左右增长目标
  • 白俄罗斯政府代表团将访问朝鲜
  • 从“土”到“潮”,唢呐何以“圈粉”年轻人
  • 取消了“仅退款”,商家就可以高枕无忧了吗?
  • 人民日报:上海“模速空间”何以汇聚超百家大模型企业