Makefile是一种用于管理和自动化软件编译过程的文本文件。它通常包含了一系列规则,这些规则描述了如何根据源代码文件生成可执行文件或者其他目标文件。Makefile的核心概念是规则和依赖关系,规则定义了如何生成一个或多个目标文件,而依赖关系则指定了生成目标文件所需要的源文件或其他依赖文件。下面我们通过一步一步编写Makefile来学习Makefile规则。
(1)linux下安装build-essential工具包
sudo apt install -y build-essential
(2)为main.c和hello.c编写基本Makefile
hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
void say_hello();
#endif
hello.c
#include "hello.h"
#include <stdio.h>
void say_hello()
{
printf("Hello world!\n");
}
main.c
#include "hello.h"
int main()
{
say_hello();
return 0;
}
# Makefile内容通常由以下部分组成
# <目标>: <前置依赖>
# <需要执行的命令>
# 放在第一个的是默认目标
# 目标为编译出main文件,依赖main.o和hello.o文件
# 编译的命令为 gcc -o main hello.o main.o
main: hello.o main.o
gcc -o main hello.o main.o
# main.o目标依赖main.c hello.h
# 编译命令为gcc -c main.c
main.o: main.c hello.h
gcc -c main.c
# hello.hello.c hello.h
# 编译命令为gcc -c hello.c
hello.o: hello.c hello.h
gcc -c hello.c
# clean目标可以清理编译的临时文件
clean:
rm main main.o hello.o
执行Makefile