我在Makefiles上看过这样的命令,我不太明白:
vpath.o: make.h config.h getopt.h gettext.h dep.h
Run Code Online (Sandbox Code Playgroud)
和
.SUFFIXES:
.SUFFIXES: .f .o
#
# %------------------%
# | Default command. |
# %------------------%
#
.DEFAULT:
@$(ECHO) "Unknown target $@, try: make help"
#
# %-------------------------------------------%
# | Command to build .o files from .f files. |
# %-------------------------------------------%
#
.f.o:
@$(ECHO) Making $@ from $<
@$(FC) -c $(FFLAGS) $<
Run Code Online (Sandbox Code Playgroud)
什么是*.o和*.suffixes是什么意思?
注意:这两个命令来自脚本的不同部分.
Bri*_*ell 27
您问题的第一行只是标准的Makefile规则.
vpath.o: make.h config.h getopt.h gettext.h dep.h
Run Code Online (Sandbox Code Playgroud)
甲.o文件是一个对象文件; 它是源文件和最终编译二进制文件之间的中间产品.它包含已编译的代码,但尚未链接到一个完整的库或二进制文件中.这条规则只是说,vpath.o依赖于make.h,config.h等等,而且每个被改变时,它应重新编译.构建所需的命令vpath.o应遵循后续行,使用制表符缩进.(抱歉,如果我重复你已经知道的东西;我不确定你对第一行的哪一部分感到困惑).
该.SUFFIXES不是指实际的文件后缀; 它只是makefile中的一种特殊规则,用于配置"后缀规则".
后缀规则是表单的规则.a.b,例如您在.f.o规则中看到的规则.它们是一种告诉make您任何时候看到.f文件(源文件)的方式,您可以.o通过遵循该规则从中创建文件(目标文件),其中$<指示源文件并$@表示目标文件.
在.SUFFIXES"目标"是一种方法来定义其后缀你可以在你的后缀规则中使用.在没有先决条件的情况下使用时,它会清除内置的后缀列表; 当与先决条件一起使用时,它会将其添加到可在后缀规则中使用的已知后缀列表中.
在GNU中make,您可以使用更强大,更清晰%的表单模式规则,例如:
%.o: %.c
gcc -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
这相当于后缀规则:
.c.o:
gcc -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅GNU Make文档(但也提到了GNU扩展),或者针对常见的可移植语法,请参阅单Unix规范/ POSIX.
| 归档时间: |
|
| 查看次数: |
16253 次 |
| 最近记录: |