这是有罪的makefile:
$ cat -n example.mak
1 define this
2 $(patsubst $(1)/%.o,%.o,why_this_does/that.o)
3 $(patsubst butnot/%.o,%.o, butnot/but_not_that.o)
4 endef
5
6 why:
7 $(info $(call this, why_this_does) ?)
这是我的问题:
$ make -f example.mak
why_this_does/that.o
but_not_that.o ?
make: 'why' is up to date.
根本原因不在patsubst
中,而在call
中。 The manual有一个注释:
最后的警告:将空白添加到要调用的参数时要小心。与其他函数一样,第二个及后续参数中包含的所有空格都将保留;这可能会导致奇怪的后果。提供调用参数时,通常最安全的方法是删除所有多余的空格。
并且的确是,如果您替换,则>
$(info $(call this, why_this_does) ?)
作者
$(info $(call this,why_this_does) ?)
您得到想要的。