makefile之自动化变量
- 常见自动化变量
- 应用举例
常见自动化变量
$@:目标文件。在模式规则中,$@代表符合模式的目标文件集合中的一个目标文件。
$<:第一个依赖文件。在模式规则中,$<代表符合模式的依赖文件集合中的第一个依赖文件。
$>:最后一个依赖文件。在模式规则中,$>代表符合模式的依赖文件集合中的最后一个依赖文件。
$::所有依赖文件列表。在模式规则中,$:代表符合模式的依赖文件集合中的所有依赖文件列表。
$?:所有依赖文件中最近的一个。在模式规则中,$?代表符合模式的依赖文件中最近的一个,也就是新的一组依赖文件中的第一个文件。
$~:所有依赖文件中最早的一个。在模式规则中,$~代表符合模式的依赖文件中最早的一个,也就是新的一组依赖文件中的最后一个文件。
应用举例
1)$@
这个变量代表当前目标文件。例如,如果你有一个规则来编译多个目标文件,你可以在规则的命令行中使用$@来表示当前正在处理的目标文件。例如:
test: test1 test2 test3 gcc -o $@ $<
在这个例子中,$@代表目标文件test。
2)$<
这个变量代表当前目标文件所依赖的第一个文件。例如,如果你有一个规则来编译多个目标文件,你可以在规则的命令行中使用$<来表示当前目标文件所依赖的第一个文件。例如:
test: test.c gcc -o $@ $<
在这个例子中,$<代表依赖文件test.c。
3)$^
这个变量代表当前目标文件所依赖的所有文件。例如,如果你有一个规则来编译多个目标文件,你可以在规则的命令行中使用$^来表示当前目标文件所依赖的所有文件。例如:
test: test1.c test2.c gcc -o $@ $^
在这个例子中,$^代表依赖文件test1.c和test2.c。
4)$?
这个变量代表所有比当前目标文件新的依赖文件的集合。例如,如果你有一个规则来编译多个目标文件,你可以在规则的命令行中使用$?来表示所有比当前目标文件新的依赖文件的集合。例如:
test: test1.c test2.c gcc -o $@ $^ $?
在这个例子中,$?代表所有比目标文件新的依赖文件。
$|
这个变量代表所有依赖文件的第一个非空格字符之前的部分。例如,如果你有一个规则来编译多个目标文件,你可以在规则的命令行中使用$|来表示所有依赖文件的第一个非空格字符之前的部分。例如:
test: test%.c gcc -o $@ $< $|
在这个例子中,$|代表所有依赖文件的第一个非空格字符之前的部分。