我有一个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.这有可能吗?
答案 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 $@ $<