【发布时间】: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