Makefile包含源文件的不同编译器标志

sto*_*oud 4 c++ gcc makefile g++

如何在Makefile中为不同的源文件使用不同的编译器标志?例如,我想要一个Makefile来生成:

g++ -c -COMPILER_FLAGS_1   -g source1.cpp -o source1.o

g++ -c -COMPILER_FLAGS_2   -g source2.cpp -o source2.o
g++ -c -COMPILER_FLAGS_2   -g source3.cpp -o source3.o
g++ -c -COMPILER_FLAGS_2   -g source4.cpp -o source4.o

g++ -c -COMPILER_FLAGS_3   -g source5.cpp -o source5.o
g++ -c -COMPILER_FLAGS_3   -g source6.cpp -o source6.o
g++ -c -COMPILER_FLAGS_3   -g source7.cpp -o source7.o

g++ -g -o output source1.o source2.o source3.o source4.o source5.o source6.o source7.o 
Run Code Online (Sandbox Code Playgroud)

目前我有大约20个源文件(并且预计会增长),因此易于维护的文件会很好.

提前致谢.

Oli*_*rth 11

您可以执行以下操作(未经测试,因此语法可能稍微偏离):

OBJS_1 := source1.o
OBJS_2 := source2.o source3.o source4.o
OBJS_3 := source5.o source6.o source7.o

OBJS := $(OBJS_1) $(OBJS_2) $(OBJS_3)

output: $(OBJS)
    $(CXX) -g -o $@ $^

$(OBJS_1): CXXFLAGS := $(COMPILER_FLAGS_1)
$(OBJS_2): CXXFLAGS := $(COMPILER_FLAGS_2)
$(OBJS_3): CXXFLAGS := $(COMPILER_FLAGS_3)

$(OBJS): %.o: %.cpp
    $(CXX) -c $(CXXFLAGS) -g $< -o $@
Run Code Online (Sandbox Code Playgroud)