📅  最后修改于: 2023-12-03 15:23:25.073000             🧑  作者: Mango
在Makefile中,我们可以定义依赖项来确保每个目标都可以正确地构建。在这篇文章中,我们将介绍如何在Makefile中定义依赖项,以及如何使用依赖项来构建项目。
在Makefile中,我们可以使用 :
符号来定义依赖项。这个符号的左边是目标,右边是这个目标所依赖的其他目标。下面是一个简单的示例:
target: dependency1 dependency2
# 命令
这个Makefile定义了一个目标 target
,它依赖于两个其他目标 dependency1
和 dependency2
。在这个Makefile中,我们还定义了一个命令,当这个目标被构建时,这个命令会被执行。
依赖项的主要用途是确保每个目标都可以正确地构建。如果一个目标的某个依赖项发生了更改,那么这个目标也需要被重新构建。例如,如果我们的Makefile包含下面的代码:
main: file1.c file2.c
gcc -o main file1.c file2.c
这个Makefile定义了一个目标 main
,它依赖于两个源文件 file1.c
和 file2.c
。如果我们修改了其中一个源文件,那么 main
这个目标将会被重新构建。
除了基本的依赖项定义之外,Makefile还支持一些高级的用法。其中比较常见的是通配符依赖项和变量依赖项。
通配符依赖项允许我们定义一个目标依赖于一组文件中的所有文件。例如,如果我们的Makefile需要构建所有的 .c
文件,我们可以使用下面的代码:
%.o: %.c
gcc -c $< -o $@
这个Makefile定义了一个通配符依赖项 %
,它匹配任意文件名。在这个Makefile中,我们定义了一个目标 .o
,它依赖于一个同名的 .c
文件。在构建这个目标时,我们使用了 $<
和 $@
这两个变量,它们分别表示第一个依赖项的文件名和目标文件的文件名。
变量依赖项允许我们定义一个目标依赖于一组变量的值。例如,如果我们的Makefile需要根据不同的选项构建不同的目标文件,我们可以使用下面的代码:
ifeq ($(DEBUG),1)
TARGET = debug
else
TARGET = release
endif
$(TARGET): file1.o file2.o
gcc -o $(TARGET) file1.o file2.o
在这个Makefile中,我们定义了一个变量 DEBUG
,它可以在命令行中被设置为 1
或 0
。根据这个变量的值,我们定义了一个目标 $(TARGET)
,它依赖于两个目标 file1.o
和 file2.o
。在构建这个目标时,我们使用了 $()
这个特殊的语法,它允许我们使用变量的值。
在Makefile中定义依赖项是确保每个目标都可以正确构建的重要一步。在本文中,我们介绍了如何定义依赖项、依赖项的用途以及一些高级的用法,包括通配符依赖项和变量依赖项。如果你正在编写一个大型的项目,那么学习如何使用依赖项将会是一个非常有用的技能。