Makefile 培训教程
Chapter 1: Makefile 简介和必要性
1.1 什么是 Makefile
Makefile 是一种文本文件,用于定义如何构建和编译软件项目。它包含了一系列规则,描述了源文件如何转化为目标文件,以及构建过程中使用的命令。
1.2 为什么需要 Makefile
Makefile 自动化了构建过程,减少了手动编译的复杂性,提高了开发效率。它能够根据文件的依赖关系自动决定哪些文件需要重新构建,从而确保项目的正确编译和构建。
1.3 Makefile vs CMake vs XMake
Makefile、CMake 和 XMake 都是构建工具,用于管理软件项目的构建过程。它们之间的主要区别在于语法和功能上的差异。Makefile 是一种基本的构建工具,CMake 提供了更高级的构建和配置功能,而 XMake 则专注于跨平台构建。
1.4 Makefile 的优点
- 简单:Makefile 的语法相对简单,易于学习和使用。
- 高效:通过自动化构建过程,减少了手动操作,提高了编译效率。
- 灵活:可以根据项目的需要定制构建规则和命令。
- 可移植性高:Makefile 在不同的操作系统和环境中都能工作,确保了项目在不同平台上的一致性。
1.5 Makefile 的历史和演进
GNU Make 是一个常用的 Make 工具,它是在 Unix 系统上发展起来的。随着软件开发的发展,出现了许多改进版本和替代工具,如 BSD Make、GNU Make、XMake 等,以满足不同项目的需求。
Chapter 2: Makefile 的基本结构和语法
2.1 Makefile 的基本结构详解
Makefile 由一系列规则组成,每个规则描述了如何将源文件转换为目标文件。规则由目标、依赖和命令三部分组成。
- 目标(target):表示要生成的文件,可以是可执行文件、中间文件等。
- 依赖(dependencies):表示生成目标所需的文件,当依赖文件发生变化时,目标将被重新构建。
- 命令(commands):表示生成目标的具体步骤,使用制表符开头,并在命令之间用换行分隔。
示例:
1 | # 规则:生成目标文件 main.o |
2.2 注释和变量
- 注释使用#符号,用于添加解释和注释,提高 Makefile 的可读性。
- 变量用于存储数据,可以是文件名、编译器选项等,以便在 Makefile 中重复使用。
Makefile使用Tips
怎么把换行符CRLF替换为LF
sed -i ‘s/\r$///‘ file1.sh
递归查找源文件和头文件
1 | //Common.mk |