使用生成文件使用一个规则编译多个文件类型



>假设我有一个以下生成文件:

CPPFILES := $(wildcard *.cpp)
OBJFILES := $(CPPFILES:.cpp=.o)
.PHONY: all
all: $(OBJFILES)
%.o: %.cpp
    $(CXX) -c $< -o $@

现在我想添加对 *.cc 文件的支持。是否可以扩展行 %.o: %.cpp 以在一行中同时处理 *.cpp 和 *.cc 文件?我期望类似的东西:%.o:%.cpp%.cc

你真的只是在重新发明make的内置规则,但以下内容应该有效

CCFILES     := $(wildcard *.cc)
CPPFILES    := $(wildcard *.cpp)
CCOBJFILES  := $(CCFILES:.cc=.o)
CPPOBJFILES := $(CPPFILES:.cpp=.o)
OBJFILES    := $(CCOBJFILES) $(CPPOBJFILES)
.PHONY: all
all: $(OBJFILES)
$(CCOBJFILES): %.o: %.cc
$(CPPOBJFILES): %.o: %.cpp
$(OBJFILES):
    $(CXX) -c $< -o $@

使用内置规则,上述内容可以缩短为

CCFILES  := $(wildcard *.cc)
CPPFILES := $(wildcard *.cpp)
.PHONY: all
all: $(CCFILES:.cc=.o) $(CPPFILES:.cpp=.o)

最新更新