【问题标题】:Using notdir within substitution reference as opposed to patsubst在替换引用中使用 notdir 而不是 patsubst
【发布时间】:2016-01-27 14:04:17
【问题描述】:

在我的 makefile 中,我从对象列表中剥离文件路径,并将该路径替换为构建目录。

使用 patsubst,这似乎可以正常工作,但是使用替换替换它似乎不起作用,例如:

OBJS=/path/to/obj1.o /another/path/obj2.o
BUILD_DIR=build

$(info patsubst = $(patsubst %, $(BUILD_DIR)/%, $(notdir $(OBJS)))) 
$(info substref = $( $(notdir $(OBJS)):%=$(BUILD_DIR)/%) )

这个输出是:

patsubst = build/obj1.o build/obj2.o

substref =

这是替换引用的缺点还是我做错了什么?

我正在使用 GNU Make 4.1,但希望我的 makefile 对其他/旧版本有效。

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    那个语法不对。替换引用在第一部分需要一个变量名,make 将扩展该变量并且替换将在扩展上执行。您将 $(notdir $(OBJS)) 作为替换的东西,它扩展为一组字符串,而不是变量名。

    patsubst 在这里可以正常工作,那么为什么需要使用替换引用?

    【讨论】:

    • 啊,我明白了,所以如果不使用中间变量,就不可能通过替换引用来做到这一点?我不必使用它,但我更喜欢它更短并且用于相当广泛的规则。这个问题更多是出于好奇而不是必要。
    • 我标记了正确的语法错误的解释。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多