makefile双美元符号用户定义的函数

时间:2013-08-01 22:11:42

标签: macros makefile call dollar-sign

Managing Projects with GNU Make的第8章(P150)中,作者介绍了Tromey’s Way

define make-depend
  $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M $1 | \
  $(SED) 's,\($$(notdir $2)\) *:,$$(dir $2) $3: ,' > $3.tmp
  $(MV) $3.tmp $3
endef

%.o: %.c
    $(call make-depend,$<,$@,$(subst .o,.d,$@))
    $(COMPILE.c) -o $@ $<

我对双美元符号$$(notdir $2)$$(dir $2)的理解是,它用于转义$以便稍后展开。但是,我们希望它在$2处运营,对吧?

我怀疑这是一个错误,但我在勘误表中找不到它。这真是一个错误,还是我误解了?

1 个答案:

答案 0 :(得分:3)

是的,像这样使用美元符号加倍是一个错误。如果您要将call函数的结果发送到类似eval的内容,再次扩展结果,那么唯一一次不会让它们加倍的话就会受到影响。但在任何一种情况下都没有必要。

我应该指出,这个例子,虽然比大多数其他方法更好,但现在有点不赞成。 GCC编译器具有的选项可以生成您想要的makefile依赖项输出,而无需后处理,同时仍然可以同时创建目标文件。这实际上更有效,因为每次编译时都不必运行编译器两次。

相关问题