替换Makefile中的文件名

问题描述 投票:0回答:1

我通常使用这一行

OBJECTS = $(SOURCES:.cpp=.o)
将SOURCES中文件的.cpp扩展名替换为.o扩展名。 我的项目现在包含扩展名为 .c 的文件和 .cpp。如何修改该行以使其将所有 .c 和 .cpp 扩展名替换为 .o?

我不喜欢如下所示的两行解决方案:

OBJECTS_TMP = $(SOURCES:.cpp=.o)
OBJECTS = $(OBJECT_TMP:.c=.o)

我想要类似的东西

OBJECTS = $(SOURCES:(.cpp|.c)=.o)

甚至

OBJECTS = $(SOURCES:.*=.o)

这可能吗?如何实现?

makefile
1个回答
4
投票

你不能只用速记来做到这一点。您必须使用 patsubst 函数:

OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCES)))

或者您可以使用其中之一:

OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES:.c=.o))

或者,你可以这样做:

OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
© www.soinside.com 2019 - 2024. All rights reserved.