替换Makefile中的文件名

Tha*_*ham 5 makefile

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

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

OBJECTS_TMP = $(SOURCES:.cpp=.o)
OBJECTS = $(OBJECT_TMP:.c=.o)
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

OBJECTS = $(SOURCES:(.cpp|.c)=.o)
Run Code Online (Sandbox Code Playgroud)

甚至

OBJECTS = $(SOURCES:.*=.o)
Run Code Online (Sandbox Code Playgroud)

这可能吗?如何实现?

Mad*_*ist 4

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

OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCES)))
Run Code Online (Sandbox Code Playgroud)

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

OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES:.c=.o))
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做:

OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
Run Code Online (Sandbox Code Playgroud)