在 Makefile 中,规则的基本结构是:
target: prerequisitescommands
然而,如果你想在同一行中定义规则的目标和命令,可以使用分号 ;
来分隔命令和目标。也就是说,分号允许你在定义规则时将命令写在与目标和依赖项同一行,而不需要换行。
解释:
.f.o:; ${FC} ${FCFLAGS} -c $*.f
.f.o:
是一个模式规则,表示从.f
文件生成.o
文件。;
是用于将规则的目标和命令写在同一行的分隔符。${FC} ${FCFLAGS} -c $*.f
是编译.f
文件的命令,其中:${FC}
是 Fortran 编译器。${FCFLAGS}
是编译器的标志。-c
表示只编译,不链接。$*.f
代表模式匹配中.f
文件的基名(不带后缀),例如,如果输入文件是example.f
,则$*
代表example
,因此$*.f
就是example.f
。
为什么要加分号?
通常,在 Makefile 中的命令部分是写在目标和依赖项的下一行,并且使用 Tab 缩进来表示。例如:
.f.o:${FC} ${FCFLAGS} -c $*.f
这种方式较为直观,但是在某些场景中,你可能希望简化写法,将规则和命令写在同一行,这时你就需要用分号 ;
来分隔目标(.f.o:
)和命令(${FC} ${FCFLAGS} -c $*.f
)。因此,分号的作用是:
- 分隔目标和命令,允许你在同一行内定义目标的依赖和执行的命令。
使用场景:
- 代码简洁性:在一些较小的 Makefile 中,使用分号可以减少行数,使 Makefile 看起来更加紧凑。
- 单一命令的规则:如果某个规则只有一个简单的命令,可以考虑将它写在同一行,使用分号来分隔。
总结:
在规则中使用分号 ;
是为了在同一行内定义目标和命令。如果命令较少或者为了代码的简洁性,这种写法比较常见。不过,如果 Makefile 中命令较多、较复杂,还是推荐使用换行的形式来增强可读性。