是否有任何软件可以自动格式化用Makefile编写的代码?

时间:2020-05-27 15:14:11

标签: makefile code-formatting

使用各种软件来自动格式化以不同编程语言编写的源代码。

我的意思是完全自动格式化源代码(不着色)-添加空格,制表符,换行符等。

除了Makefiles之外,还有其他替代方法吗?

我已经尝试过用“ grep”,“ sed”,“ awk”以“ bash”方式进行操作,我快完成了。

P.S。例如,请比较格式错误的Makefile.ugly:

CONFIG_ZERO=y
CONFIG_ONE=y
CONFIG_TWO=y

ifeq ($(CONFIG_ZERO),y)
list_of_targets += t1 t2 t4
ifeq ($(CONFIG_TWO),y)
list_of_targets += t5 t6 t7
endif
ifeq ($(CONFIG_ONE),y)
list_of_targets += t8 t9
endif
endif

.PHONY: all
all:
                $(info Using following targets: $(list_of_targets))

格式正确的版本(Makefile.formatted):

CONFIG_ZERO=y
CONFIG_ONE=y
CONFIG_TWO=y

ifeq ($(CONFIG_ZERO),y)
  list_of_targets += t1 t2 t4

  ifeq ($(CONFIG_TWO),y)
    list_of_targets += t5 t6 t7
  endif

  ifeq ($(CONFIG_ONE),y)
    list_of_targets += t8 t9
  endif
endif

.PHONY: all
all:
    $(info Using following targets: $(list_of_targets))

1 个答案:

答案 0 :(得分:1)

makefile的水平布局相对不变:配方代码(规则中的shell代码)的领先制表符是一种语法元素,就像Python中一样,无法更好地更改(您可以添加更多的制表符,但效果可能会比看上去更好。其他代码(例如变量定义)只能由空格字符开头,此类定义体内的所有空格和制表符,有时甚至最后的不可见空格也可以起到功能性作用,更改它们可以破坏其预期的效果。

这将为您提供垂直布局的选项。考虑到执行makefile的两个阶段,您有两个自由度:1)没有相互依赖关系的变量定义,以及2)规则的顺序(第一个除外,它将用作默认值)不带参数的普通make调用的目标)是任意的。这意味着您可以将规则进一步移至makefile iff 的后面,在评估makefile的过程中,它们使用的变量不会更改其内容,这本身并不是一件容易的事。美化者必须构造相同的内部数据结构,例如make来确定源转换是否正确-以及仅需对规则进行适度重新排序的所有麻烦。

TL; DR:make的语法很难转换(在同等条件下),并且即使在同一编程团队中,也很难捍卫由此产生的美观性,因此很少这样做。