📜  Makefile-重新编译(1)

📅  最后修改于: 2023-12-03 15:02:50.977000             🧑  作者: Mango

Makefile-重新编译

当我们编写一个较为复杂的项目时,难免会有许多的文件需要编译。如果每次修改完代码后都要手动编译,这将会是一件很费时间、精力的事情。因此我们需要一个自动化编译的工具,这个工具就是 Makefile。

什么是 Makefile?

Makefile 是一个文本文件,其包含了描述源代码文件依赖关系的目标集合,以及如何编译这些目标的规则。

Makefile 的优点
  1. 自动化编译,提高效率。
  2. 可以在多个文件之间建立依赖关系。
  3. 可以避免犯错。
Makefile 的语法

Makefile 包含了许多规则。其中,最常用的是规则的基本结构:

目标: 依赖
	命令

target 就是要生成的目标文件,prerequisites 就是生成该目标所需要的文件或目标,commands 就是生成目标的命令。

Makefile 的具体实现

下面是一个 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 的规则如下:

  1. 如果没有指定目标,则默认生成 myprog 文件;
  2. myprog 文件依赖于 main.omyclass.o 文件;
  3. 生成 myprog 的命令是 $(CC) main.o myclass.o -o $(TARGET)
  4. main.o 文件依赖于 main.cpp 文件;
  5. 生成 main.o 的命令是 $(CC) $(CFLAGS) main.cpp -o main.o
  6. myclass.o 文件依赖于 myclass.cpp 文件;
  7. 生成 myclass.o 的命令是 $(CC) $(CFLAGS) myclass.cpp -o myclass.o
  8. clean 规则可以用来清除所有编译文件。
总结

Makefile 是一个非常有用的工具,使用它可以将编译过程自动化,提高程序员的工作效率。掌握 Makefile 的语法和规则非常重要,这对于编写大型项目有极大的帮助。