- Makefile 教程
- Makefile - 首页
- Makefile - 为什么使用 Makefile?
- Makefile - 宏
- Makefile - 依赖关系
- Makefile - 规则
- Makefile - 后缀规则
- Makefile - 指令
- Makefile - 重新编译
- Makefile - 其他功能
- Makefile - 示例
- Makefile 快速指南
- Makefile - 快速指南
- Makefile - 有用资源
- Makefile - 讨论
在 Makefile 中定义规则
现在我们将学习 Makefile 的规则。
Makefile 目标规则的一般语法如下:
target [target...] : [dependent ....] [ command ...]
在上面的代码中,括号中的参数是可选的,省略号表示一个或多个。这里需要注意的是,每个命令前面都需要使用制表符。
下面给出一个简单的示例,其中定义了一个规则,用于从其他三个文件创建目标 hello。
hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello
注意 - 在此示例中,您需要提供规则,以便从源文件创建所有目标文件。
语义非常简单。当您说“make target”时,make 会找到适用的目标规则;并且,如果任何依赖项比目标更新,make 就会依次执行这些命令(在宏替换之后)。如果需要创建任何依赖项,则会首先创建它们(因此您有一个递归)。
如果任何命令返回失败状态,Make 将终止。在这种情况下,将显示以下规则:
clean: -rm *.o *~ core paper
Make 忽略以连字符开头的命令行上的返回状态。例如,谁在乎是否有核心文件?
Make 会在宏替换后回显命令,以向您显示正在发生的事情。有时您可能希望关闭它。例如:
install: @echo You must be root to install
人们已经习惯了 Makefile 中的某些目标。您应该始终先浏览一下。但是,可以合理地预期会找到 all(或仅 make)、install 和 clean 目标。
make all - 它编译所有内容,以便您可以在安装应用程序之前进行本地测试。
make install - 它将应用程序安装到正确的位置。
make clean - 它清理应用程序,删除可执行文件、任何临时文件、目标文件等。
Makefile 隐式规则
该命令应该在所有情况下都能工作,在这些情况下,我们从源代码 x.cpp 构建可执行文件 x。这可以表示为一个隐式规则:
.cpp: $(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@
此隐式规则说明了如何从 x.c 创建 x -- 对 x.c 运行 cc 并将输出称为 x。该规则是隐式的,因为没有提到特定的目标。它可以在所有情况下使用。
另一个常见的隐式规则是用于从 .cpp(源文件)构建 .o(目标)文件。
.cpp.o: $(CC) $(CFLAGS) -c $< alternatively .cpp.o: $(CC) $(CFLAGS) -c $*.cpp