【发布时间】:2016-10-03 16:53:15
【问题描述】:
请注意,关于 SO 也有类似的问题,但是我认为我的情况有所不同,而且我的 Makefile 非常简单明了。我是 Makefile 新手。
假设我需要编译一个项目,看起来像这样--
.
├── [4.0K] bin
├── [ 517] Makefile
├── [4.0K] obj
└── [4.0K] src
├── [ 117] func1.cpp
├── [ 76] func2.cpp
├── [ 137] global.h
└── [ 97] main1.cpp
我的 Makefile 看起来像这样 --
CC := g++
CFLAGS := -g -Wall -std=c++0x
LDFLAGS := -lm
NAMES := func1.cpp func2.cpp main1.cpp
SRC := $(addprefix src/,$(NAMES))
OBJ := $(addprefix obj/,$(NAMES:.cpp=.o))
DEPS := $(OBJ:.o=.d)
.PHONY: clean all debug
all: prog
debug:
$(info $$SRC: ${SRC})
$(info $$OBJ: ${OBJ})
$(info $$DEPS: ${DEPS})
prog: bin/prog
bin/prog: $(OBJ)
$(CC) $^ -o $@
$(OBJ): $(SRC)
$(CC) $(CFLAGS) -I/src/global.h -c $(addprefix src/,$(notdir $(@:.o=.cpp))) -o $@
-include $(DEPS)
clean:
rm -rf bin/*
rm -rf obj/*
假设我打开了一个文件func1.cpp 并进行了一些更改。当我调用 make 时,它会编译所有文件,但它应该只编译一个 (func1.cpp)。
我该如何解决这个问题?
注意:我需要prog,bin/prog 的原因不同,我也不能像obj/%.o: src/%.c 这样的食谱,因为我可能有来自相同对象子集的不同目标.
【问题讨论】:
-
我怀疑您只需要将
-MMD -MP添加到您的CFLAGS。或者也许只是你的$(OBJ): $(SRC)目标的命令。