📅  最后修改于: 2023-12-03 14:43:55.345000             🧑  作者: Mango
Make是一种自动化构建工具,可以自动化执行复杂的源代码编译过程。Makefile文件是Make工具使用的脚本文件,其中定义了规则和指示Make工具如何编译和链接源文件。
一个Makefile文件主要包括了注释、变量、规则和命令。
Makefile中的注释以'#'号开头,可以位于任何位置,只要不在一个在引号内的字符串中就可以。
Makefile文件中可以使用变量来存储编译时所需要的信息,例如编译器、编译选项等。变量定义的语法为:
变量名 = 变量值
使用变量的方式为$(变量名)。
规则指明了make工具所依赖的源文件和目标文件,以及如何将源文件编译成目标文件的方法。一般规则的形式为:
目标文件: 依赖文件
命令
其中,目标文件是生成的目标文件,依赖文件是生成目标文件所依赖的源文件或其他目标文件。
命令是指定如何将一个或多个输入文件转换成输出文件的计算机指令。命令必须以tab键开头,而不能使用空格。
Make命令的基本语法为:
make [target]
target是Makefile文件中定义的一个目标文件,如果没有指定,默认执行文件中定义的第一个目标文件。
-c:只编译不链接生成目标文件。
-C dir:指定Makefile文件的路径。
-f file:指定要使用的Makefile文件。
-j[n]:并行构建,n为同时构建任务的数量。
-q:只判断是否需要构建,不实际执行任何命令。
下面是一个简单的Makefile文件和对应的执行结果。
CC=gcc
CFLAGS=-Wall -Werror
TARGET=hello
all: $(TARGET)
$(TARGET): main.o hello.o
$(CC) $(CFLAGS) $^ -o $@
main.o: main.c hello.h
$(CC) $(CFLAGS) -c main.c
hello.o: hello.c hello.h
$(CC) $(CFLAGS) -c hello.c
.PHONY: clean
clean:
rm -rf $(TARGET) *.o
$ make
gcc -Wall -Werror -c main.c
gcc -Wall -Werror -c hello.c
gcc -Wall -Werror main.o hello.o -o hello
$ ./hello
Hello, World!
$ make clean
rm -rf hello *.o