2
請注意,在SO上也有類似的問題,但我認爲我的情況不同,而且我的Makefile非常簡單直接。我是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 [email protected]
$(OBJ): $(SRC)
$(CC) $(CFLAGS) -I/src/global.h -c $(addprefix src/,$(notdir $(@:.o=.cpp))) -o [email protected]
-include $(DEPS)
clean:
rm -rf bin/*
rm -rf obj/*
假設我打開的文件func1.cpp
並作了一些修改。當我調用make
它編譯所有文件,但它應該只編譯一個(func1.cpp
)。
我該如何解決這個問題?
注:我需要prog
,bin/prog
出於不同的原因,也是我無法做到像obj/%.o: src/%.c
食譜,因爲我可能有不同的目標來自同一對象的子集。
可能的重複[如何使Makefile重新編譯僅更改的文件?](http://stackoverflow.com/questions/7815400/how-do-i-make-makefile-to-recompile-only-changed-文件) – Xirema
我懷疑你只需要添加'-MMD -MP'到你的'CFLAGS'。或者,也許只是你的'$(OBJ):$(SRC)'目標的命令。 – Galik