Makefile:计算变量名

时间:2016-10-31 03:24:04

标签: makefile

在以下示例Makefile中:

EXTENS := .c .C .cc .c++ .cpp .cxx
SOURCES := 1.c 2.C 3.cc 4.c++ 5.cpp 6.cxx
OBJECTS := $(SOURCES)

REPLACE_EXTENS = $(foreach f,$(EXTENS),$(eval $(1) := $(patsubst %$(f),%.o,$($(1)))))
$(call REPLACE_EXTENS, OBJECTS)

all:
    @echo $(SOURCES)
    @echo $(OBJECTS)

我希望输出行@echo $(OBJECTS)

1.o 2.o 3.o 4.o 5.o 6.o

然而它什么也没输出。我做错了什么以及做正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

$(call REPLACE_EXTENS, OBJECTS)更改为$(call REPLACE_EXTENS,OBJECTS)。调用参数之间没有空格。

答案 1 :(得分:1)

这样做的正确方法是完全抛弃EXTENS和REPLACE_EXTENS调用,然后写:

SOURCES := 1.c 2.C 3.cc 4.c++ 5.cpp 6.cxx
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))

all:
        @echo $(SOURCES)
        @echo $(OBJECTS)