Makefile是一种组织代码编译的方法,它定义了一组规则来指定哪些文件需要首先被编译,以及如何从源代码文件生成目标文件。Makefile的主要目标是简化和自动化编译过程,避免手动调用复杂的命令行。
在详解Makefile基础指令之前,我们需要了解几个基本概念:
- 目标(Target):通常是生成的可执行程序或者库。
- 依赖(Dependencies):这些是目标所依赖的源码或者其他对象。
- 命令(Commands):这些命令用于从依赖生成目标。
一个基本格式如下:
target: dependencies
commands
现在我们来详细介绍几个常见和重要的Makefile指令:
- all: 这个特殊规则通常位于makefile开始部分。当你只输入
make
而不带任何参数时,默认执行此规则。它后面跟着所有顶级目标名字,并且每一个名字都必须在文档中有对应定义。
all: prog1 prog2 prog3
- clean: 这也是一个特殊规则,在你想清除所有被make创建出来对象时使用此命令。例如删除.o和可执行文件等。
clean:
rm -f *.o prog1 prog2 prog3
- .PHONY: 这是一个伪目标,它用于在没有文件名的情况下执行命令。例如,我们经常将
all
和clean
作为.PHONY
的目标。
.PHONY: all clean
- 变量: 在Makefile中,我们可以定义变量来简化和统一管理。例如定义编译器、编译选项等。
CC=gcc
CFLAGS=-I.
- 自动变量:这些是特殊的预定义变量,在规则中可以使用它们来引用当前规则的目标名和依赖项等。常见自动变量有:
$@
: 表示规则中的目标文件集。$^
: 表示所有依赖对象集合。$<
: 表示第一个依赖对象。
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
- 通配符:在Makefile中我们可以使用通配符(如*、?)来匹配文件名或者字符串。
- 函数:Makefile提供了一些内建函数供用户使用,在复杂情况下非常有用。如subst、patsubst、strip等函数。
以上就是对于Makefile基础指令详解内容,希望对你理解和应用Makefile有所帮助。
云服务器/高防CDN推荐
蓝易云国内/海外高防云服务器推荐
[post url="https://www.tsyvps.com" title="蓝易云-五网CN2服务器【点我购买】" intro="蓝易云采用KVM高性能架构,稳定可靠,安全无忧!
蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。" cover="https://www.8kiz.cn/img/6.png" /]
[font color="#000000"]海外免备案云服务器链接:www.tsyvps.com[/font]
[font color="#000000"]蓝易云安全企业级高防CDN:www.tsycdn.com[/font]
[font color="#DC143C"]持有增值电信营业许可证:B1-20222080【资质齐全】[/font]
[font color="#DC143C"]蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。[/font]