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

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)

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

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

http://www.xdnf.cn/news/4162.html

相关文章:

  • ffmpeg录音测试
  • 爬虫程序中如何添加异常处理?
  • Vi/Vim 编辑器详细指南
  • Facebook如何运用AI实现元宇宙的无限可能?
  • DC-DC降压型开关电源(Buck Converter)设计中,开关频率(f sw​ )、滤波电感(L)和滤波电容(C out​ )的关系和取舍
  • uniapp 全局混入:监听路由变化,路由变化即执行
  • 嵌入式openharmony标准鸿蒙系统驱动开发基本原理与流程
  • openssl 生成自签名证书实现接口支持https
  • 【coze】手册小助手(提示词、知识库、交互、发布)
  • C++中指针使用详解(4)指针的高级应用汇总
  • 人工智能对人类的影响
  • 【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系
  • kubeadm部署k8s
  • openwrt 使用quilt 打补丁(patch)
  • 基于图像处理的道路监控与路面障碍检测系统设计与实现 (源码+定制+开发) 图像处理 计算机视觉 道路监控系统 视频帧分析 道路安全监控 城市道路管理
  • 计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)
  • 【Python系列】Python 中的 HTTP 请求处理
  • OpenAI的“四面楚歌”:从营利到非营利,一场关于AGI控制权的革命
  • 信息时代的政治重构:网络空间与主权的未来
  • 搭建spark yarn 模式的集群
  • mybatis 的多表查询
  • Nacos源码—4.Nacos集群高可用分析四
  • 【Linux网络】应用层协议HTTP
  • Ubuntu18.04搭建samda服务器
  • ORACLE EBS 12.1 启用https 简单策略
  • 谷歌在即将举行的I/O大会之前,意外泄露了其全新设计语言“Material 3 Expressive”的细节
  • 如何通过外网访问内网?对比5个简单的局域网让互联网连接方案
  • 单应性估计
  • 《深入探索位操作符:Python、Java与C语言的实现与应用》
  • UE5 渲染思路笔记(角色)