OBJ=$(patsubst %,$(OBJ_DIR)/%,$(_OBJ))
добавляет obj/
к словам _OBJ
.Вы хотите заменить src
на obj
что-то, что вы можете сделать с
OBJ=$(patsubst $(SRC_ROOT)/%,$(OBJ_DIR)/%,$(_OBJ))
Обратите внимание, что структура каталогов, которую вы получаете, предполагает наличие подкаталогов Application
и Tasks
до obj
, которые у вас естьчтобы создать их вручную перед вызовом make
или обновлением Makefile для их создания.
Вот что-то, что ведет себя так, как я ожидаю, когда структура каталогов предварительно создана.
APPNAME=MyBinary
SRC_ROOT=src
OBJ_DIR=obj
DEPS=$(SRC_ROOT)/Application/Application.h \
$(SRC_ROOT)/Tasks/BackgroundWorker.h
_OBJ=$(SRC_ROOT)/Application/Application.o \
$(SRC_ROOT)/Tasks/BackgroundWorker.o\
$(SRC_ROOT)/main.o
OBJ=$(patsubst $(SRC_ROOT)/%,$(OBJ_DIR)/%,$(_OBJ))
$(OBJ_DIR)/%.o: $(SRC_ROOT)/%.cpp $(DEPS)
echo Making $@ from $<
touch $@
$(APPNAME): $(OBJ)
echo Making $@ from $^
touch $@
Примечаниечто на практике вы должны быть лучше с зависимостями и, вероятно, иметь их для генерации компилятором (см. -MM
и аналогичные опции для g ++), здесь вы перекомпилируете все, когда вы изменяете заголовок.