Makefile是一种用于编译和链接C++程序的文本文件,它是一种简单的脚本语言,用于指定编译和链接的步骤。编译过程是将源代码文件编译成可执行文件的过程。
Makefile文件的编写包括三个步骤:编写Makefile文件、编译程序和链接程序。
编写Makefile文件
Makefile文件是一个文本文件,其中包含了编译和链接的指令,以及源文件的位置。要编写Makefile文件,需要知道源文件的位置,以及编译和链接的步骤。
# Makefile
#指定源文件
SRCS = main.cpp foo.cpp bar.cpp
#指定目标文件
TARGET = myprog
#指定编译器
CC = g++
#指定编译器选项
CFLAGS = -Wall -g
#指定链接器
LD = g++
#指定链接器选项
LDFLAGS =
#指定目标文件
OBJS = $(SRCS:.cpp=.o)
#生成目标文件
$(TARGET): $(OBJS)
$(LD) $(LDFLAGS) -o $(TARGET) $(OBJS)
#编译源文件
.cpp.o:
$(CC) $(CFLAGS) -c $<
#清除中间文件
clean:
rm -f $(OBJS) $(TARGET)
上面的Makefile文件中,定义了源文件的位置,定义了编译器和链接器的选项,定义了目标文件的生成和清除中间文件的步骤。
编译程序
编译程序是将源代码文件编译成可执行文件的过程。Makefile文件中定义了编译器的选项,执行编译步骤需要使用编译器,例如g++。
#使用g++编译源文件 g++ -Wall -g main.cpp foo.cpp bar.cpp -o myprog
上面的命令行中,-Wall表示输出所有警告信息,-g表示输出调试信息,-o表示输出可执行文件到myprog。
链接程序
链接程序是将编译后的目标文件链接成可执行文件的过程。Makefile文件中定义了链接器的选项,执行链接步骤需要使用链接器,例如g++。
#使用g++链接编译后的目标文件 g++ -o myprog main.o foo.o bar.o
上面的命令行中,-o表示将目标文件链接成可执行文件myprog。
使用方法
使用make命令可以自动执行Makefile文件中定义的编译和链接步骤。
- 进入包含Makefile文件的目录,执行make命令:
cd myprog make
- make命令会自动执行Makefile文件中定义的编译和链接步骤:
g++ -Wall -g main.cpp foo.cpp bar.cpp -o myprog g++ -o myprog main.o foo.o bar.o
- make命令会生成可执行文件myprog:
myprog