Обратите внимание, что на 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)' target. – Galik