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

时间:2016-03-21 19:59:34

标签: c++ makefile

假设我有以下makefile:

CPPFILES := $(wildcard *.cpp)
OBJFILES := $(CPPFILES:.cpp=.o)

.PHONY: all
all: $(OBJFILES)

%.o: %.cpp
    $(CXX) -c $< -o $@

现在我想添加对* .cc文件的支持。 有可能扩展行%。o:%。cpp 来处理一行中的* .cpp和* .cc文件吗?我希望如下:%。o:%。cpp%。cc

非常感谢, 托雷诺

1 个答案:

答案 0 :(得分:1)

你真的只是重新制作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)