Make:将所有扩展名更改为 .o

Make: Change all extensions to .o

我有一个 makefile,其中有一个名为 SOURCES 的数组。在这个数组中,有一个c文件,还有一个c++文件。但是我想将该数组中的每个路径的扩展名更改为 .o,无论它是 c 还是 c++。我怎么能这样做?我知道要将一个扩展名更改为另一个扩展名,我可以这样做:OBJECTS=$(SOURCES:.c=.o),但我也想对 C++ 文件执行此操作。

几个不同的选项。

使用$(filter)/$(filter-out)并进行两次替换:

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

或者,如果您知道 SOURCES 中只有 .c.cpp 文件(或者想要支持 SOURCES 中的其他扩展被转换为 .o) 你可以使用 $(basename) and $(addsuffix):

OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))

只需使用这个:

对象=$(来源:.cpp=.o)

对于文件扩展名 .cpp

https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#Text-Functions