📅  最后修改于: 2023-12-03 15:02:50.977000             🧑  作者: Mango
当我们编写一个较为复杂的项目时,难免会有许多的文件需要编译。如果每次修改完代码后都要手动编译,这将会是一件很费时间、精力的事情。因此我们需要一个自动化编译的工具,这个工具就是 Makefile。
Makefile 是一个文本文件,其包含了描述源代码文件依赖关系的目标集合,以及如何编译这些目标的规则。
Makefile 包含了许多规则。其中,最常用的是规则的基本结构:
目标: 依赖
命令
target 就是要生成的目标文件,prerequisites 就是生成该目标所需要的文件或目标,commands 就是生成目标的命令。
下面是一个 C++ 程序 Makefile 的示例:
CC = g++
CFLAGS = -c -Wall
TARGET = myprog
all: $(TARGET)
$(TARGET): main.o myclass.o
$(CC) main.o myclass.o -o $(TARGET)
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp -o main.o
myclass.o: myclass.cpp
$(CC) $(CFLAGS) myclass.cpp -o myclass.o
clean:
rm -f *.o $(TARGET)
其中 CC
表示编译器,CFLAGS
表示编译选项,TARGET
表示目标文件名。all
表示默认编译的目标。clean
表示清除所有编译文件。这个 Makefile 的规则如下:
myprog
文件;myprog
文件依赖于 main.o
和 myclass.o
文件;myprog
的命令是 $(CC) main.o myclass.o -o $(TARGET)
;main.o
文件依赖于 main.cpp
文件;main.o
的命令是 $(CC) $(CFLAGS) main.cpp -o main.o
;myclass.o
文件依赖于 myclass.cpp
文件;myclass.o
的命令是 $(CC) $(CFLAGS) myclass.cpp -o myclass.o
;clean
规则可以用来清除所有编译文件。 Makefile 是一个非常有用的工具,使用它可以将编译过程自动化,提高程序员的工作效率。掌握 Makefile 的语法和规则非常重要,这对于编写大型项目有极大的帮助。