IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux中make工具及makefile文件 -> 正文阅读

[系统运维]Linux中make工具及makefile文件

一、make工具简介

1、make 工具通过一个称为 makefile 的文件(类似脚本)来完成并自动维护编译工作,针对目标(可执行文件)进行依赖性检测(要生成该可执行文件之前要有哪些中间文件)并执行相关动作(编译等)的工具 。其中makefile中内容包含make所要进行的处理动作以及依赖关系。

2、使用make 的其他好处:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。提高了开发效率并且减少了重复编译时间。

?二、Makefile组成

1、makefile组成三要素:目标、依赖、命令

hello.o:hello.c hello.h
    gcc -c hello.c

上述为makefile基本组成,可描述为:我们最终要生成hello.o文件(目标),但是需要依赖hello.c文件、hello.h文件,而去处理gcc -c hello.c这个命令。

注:

①makefile文件与源文件(.c .h)存放在同一目录下

②每个命令之前都要用tab键分隔

三、makefie文件编写方式

准备工作:

main.c、hello.h、hello.c文件(此处仅展示main.c)

?

1、普通版

main:main.o hello.o
	gcc main.o hello.o -o main
main.o:main.c hello.h
	gcc -c main.c
hello.o:hello.c hello.h
	gcc -c hello.c
clean:
	rm -rf *.o main

?①ls查看

?② 使用make命令,生成.o文件和可执行文件

③./main 运行

?注:

①gcc main.o hello.o -o main:编译出可执行文件main。-o表示指定的可执行文件名

②gcc -c main.c:编译出main.o文件,-c是只把给它的文件编译成目标文件

③make clean:删除掉所有.o以及可执行文件,当修改了某一个源文件使用该指令清除旧的文件。

?

2、变量版

OBJ=main.o hello.o
G = gcc
main:$(OBJ)
	$(G) $(OBJ) -o main
main.o:main.c hello.h
	$(G) -c main.c
hello.o:hello.c hello.h
	$(G) -c hello.c
clean:
	rm -rf *.o main		

使用make后生成文件同同变量版

??注:

变量的格式为:var = content,如果要引用这个变量,用$(var)

缺点:每添加一个.c文件,就需要修改makefile文件

3、函数版

SRCS := $(wildcard *.c)
OBJS := $(patsubst %.c,%.o,$(SRCS))
G = gcc
TARGETS = main
$(TARGETS):$(OBJS) 
	$(G) $^ -o $@
%.o:%.c
	$(G) -c $<
clean:
	rm -f *.o $@

使用make后生成文件同变量版

注:

1、SRCS := $(wildcard *.c) 表示产生一个所有以.c为结尾的文件列表,然后存入变量SRCS里。

2、OBJS := $(patsubst %.c,%.o,$(SRCS))
把SRCS文件列表中所有.c文件变成.o文件,接着形成一个新的列表,存入OBJS变量。

3、wildcard函数:当前目录下匹配模式的文件

4、patsubst函数:模式匹配替换

四、附录:

gcc命令常用选项
选项说明
-c编译生成目标文件
-o生成可执行文件
-g编译debug版本,生成调试信息
-O在编译时进行优化
-E运行C预编译器
-Wall输出所有警告信息
-shared生成共享目标文件(建立动态库)
-static禁止使用共享连接

?参考文档:

linux下make以及makefile(一)_麒麒川的博客-CSDN博客_linux makefile

Linux编程工具-Makefile(一)_君莫笑的博客-CSDN博客

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:37:23  更:2021-12-06 15:37:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:22:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码