Makefile文件编写-Linux-Ubuntu系统

目录

一、Makefile文件介绍

二、Makefile文件规则(格式)

1、格式

举例一:基本格式

举例二:引入变量机制

举例三:引入自动变量

举例四:多c文件编译

举例五:伪目标


一、Makefile文件介绍

两种文件名格式:Makefile、makefile

作用:Makefile是工程管理,如果编译的c文件很多,可以使用Makefile减少工作量;只需要执行一个make命令即可编译所有的c文件

make命令依赖于一个当前目录下名为Makefile的配置文件

Makefile文件会告诉make命令如何编译、如何执行

二、Makefile文件规则(格式)

1、格式

复制代码
目标:依赖

    命令        //命令前面的空余部分是一个Tab键
举例一:基本格式

在当前文件下需要有两个文件,一个是hello.c,一个是Makefile

复制代码
hello:hello.c
    gcc hello.c -o hello
**举例二:**引入变量机制

更换编译工具,引入变量机制

引用变量使用$()

复制代码
CC=gcc
hello:hello.c
    $(CC) hello.c -o hello
举例三:引入自动变量

$@ 代表所有目标

%^ 代表所有依赖

%< 代表第一个依赖

下面代码将举例二的代码使用自动变量替换

复制代码
CC=gcc
hello:hello.c
    $(CC) $^ -o $@
举例四:多c文件编译

下面有a.c,b.c,main.c,a.h,b.h几个c语言文件,若不适应Makefile文件编译,需要一个一个的使用gcc命令编译,比较麻烦:

使用Makefile文件进行多C语言文件编译:

直接在当前目录下使用make命令,即可生成可执行文件test,

举例五、多文件编译简化makefile(隐式规则)

举例四的makefile依旧有一些复杂,可以使用自动变量进行简化,如下面,第一张为之前未简化,第二张为简化后的makefile

举例六:模式规则

如下图makefile文件,使用%.o: %.c,这种模式下使用make命令可以指定仅编译哪一个.c 文件

举例七:伪目标

在当前目录下不能有和makefile目标名一样的文件,比如在makefile文件里创建一个clean目标,在当前目录下建一个名为clean的文件,再执行make clean命令就会报错

解决方法:使用伪目标来声明clean就可以避免与当前目录下的同名文件发生冲突

伪目标格式:(.PHONY:目标)

举例:之前的clean目标可以修改成这样,再执行make clean命令,尽管当前目录下有clean的同名文件,make clean命令也可以执行成功

举例八:make命令的参数

-f 参数:指定makefile,若此目录下有两个makefile文件,名字不同,可以使用-f参数指定

未完待续......

相关推荐
草莓熊Lotso几秒前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
李纲明2 分钟前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
志栋智能8 小时前
运维超自动化的版本控制与回滚机制
运维·自动化
中云DDoS CC防护蔡蔡8 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
ClickHouseDB8 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
欧米欧9 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
todoitbo9 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺9 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生