【问题标题】:How do I properly comment a variable definition in GNU Make?如何正确注释 GNU Make 中的变量定义?
【发布时间】:2015-07-23 11:58:49
【问题描述】:

所以我想在 Makefile 内联注释变量定义。问题是 Make 不会去除定义和注释之间的空格。这是我的意思的一个例子:

OPTS += -DBLA       # Does bla
OPTS += -DBLUBB     # Does blubb
OPTS += -DEND

.PHONY test
test:
    @echo $(OPTS)

这个输出是

-DBLA       -DBLUBB     -DEND

选项之间有烦人的额外空格。我想要的是这样的:

-DBLA -DBLUBB -DEND

如何解决这个问题? Make string 函数@echo $(strip $(OPTS)) 只会在-DEND 之后或-DBLA 之前去除空格,而不是介于两者之间。到目前为止,我的肮脏黑客是@echo $(shell $(OPTS)),它去除了不需要的空格,但使用了一个shell调用来这样做,这可能会引入其他问题,即通过$(OPTS)变量进行不需要的shell注入。有更好的方法吗?简单的@echo ($subst ...) 不适用于混合空格,除非替换所有空格然后重新插入-

【问题讨论】:

  • 把cmets放在作业上面的那一行?处理正在运行的命令中无害的额外空间(shell 无论如何都会立即将其丢弃)?
  • 上面的行是显而易见的选择,但我不希望 cmets 在不同的行上。它使 Makefile 膨胀并使其可读性降低。是的,贝壳会把它们扔掉。然而,在此之前,它们在我的 IDE 中产生了一些问题。 IDE 包含对 Make 的调用。
  • 听起来您的 IDE 需要修复,而您断然拒绝了唯一的解决方案。祝你好运。 (根据我的经验,过度注释使得 makefile 不可能 阅读,至少在新加入时是这样。)
  • 如果你只在一开始就解释选项,但没关系,如果你已经弄清楚了。
  • 另外,$(strip) 会根据the manual 压缩内部空白。

标签: string replace comments gnu-make


【解决方案1】:
OPTS += -DBLA#     Does bla
OPTS += -DBLUBB#   Does blubb
OPTS += -DEND

规范制作? 不过不喜欢对齐。

OPTS += -DBLA# Does bla
OPTS += -DBLUBB# Does blubb
OPTS += -DEND

我的眼睛看起来更好。

假设它会让你的眼睛流血, $(strip) 实际上做你想做的事。

OPTS := $(strip ${OPTS})

一个简单的$(error [${OPTS}]) 就可以证明这一点。

【讨论】:

    【解决方案2】:


    当然,'zZz' 可以替换为任何“不可能的”匹配...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多