用于缩进 Make 文件规则配方的字符是什么?

用于缩进 Make 文件规则配方的字符是什么?

我正在使用 gnu make,在我有的 Makefile 中,我看到以下规则。我想添加一个带有配方的类似规则,但是当我在下一行添加规则及其配方时,通过为配方提供制表符或空格,我得到了 make 错误。

dummy :
    @echo $(OBJS)

当我打开 vim 命令 :set list 时,我看到:

dummy :$
^I@echo $(OBJS)$

菜谱行(第二行)之前的字符到底是什么,它们从行首开始缩进?

如何使用键盘输入它们(而不必复制粘贴现有规则然后修改它?

在哪里可以找到有关从头开始手动创建 Makefile 时使用的各种空格/缩进的信息(不是自动制作/或其他工具创建的 Makefile)?

答案1

生成文件中的配方必须前面只有一个标准tab字符,没有其他字符。

^I是制表符的表示(参见维基百科上的表格ASCII页),因此这应该是正确的。

因此您应该能够使用TabCtrl+输入它I
(假设这些没有被软件重新映射)


编辑

经过进一步调查,你通过设置.RECIPEPREFIX 特殊变量

如果此值已在 makefile 中定义,则所有配方定义必须使用该字符而不是制表符。

答案2

从上面 DMA57361 给出的答案中挑选一些指针并进行一些摆弄之后,我注意到很久以前在我的 .vimrc 中我有这个命令 set expandtab(它将制表符扩展为空格)并且我使用 vim。

这破坏了我在 Makefile 规则中输入的 Tab 字符。在 .vimrc 中注释该行很有帮助,对我来说很有效。

答案3

根据公认的答案:配方前面必须有一个字符,如果在 中启用,tab则会自动替换该字符。不建议覆盖您的,因为这会破坏您下载的代码库中的 makefile。最简单的方法是简单地从您的配置中删除,但您可以通过添加以下行来解决这个问题set expandtab.vimrc.RECIPEPREFIXset expandtab

autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab

expandtab仅当您编辑 makefile 时才会禁用此功能。

相关内容