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
我有一个 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