如何使用Makefile(g ++)仅将一些文件链接到对象?

时间:2014-08-02 02:10:58

标签: c++ gcc makefile

我有一个Makefile,它将源代码编译为目标文件,它可以工作:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    g++ $(FLAGS) $(INCLUDES) -c -o $@ $<

但它包含我的src目录中的所有文件。假设我有一些文件(例如“x.cpp”),我不想将其作为编译的一部分。我想手动指定一些文件来编译成对象。例如,

SRC = src/one.cpp src/two.cpp
OBJ = obj/one.o obj/two.o
$(OBJ_DIR)/%.o: $(SRC)
    g++ $(FLAGS) $(INCLUDES) -c -o $@ $<

我得到one.o,two.o,但不是x.o.这有可能吗?

1 个答案:

答案 0 :(得分:1)

定义模块列表,构建实际需要的对象列表:

MODULES = one two
OBJECTS = $(addprefix ${OBJ_DIR}/, $(addsuffix .o, ${MODULES}))

all : ${OBJECTS}

将规则限制为列表中的规则:

${OBJECTS}: $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        g++ $(FLAGS) $(INCLUDES) -c -o $@ $<