Возможно, я делаю что-то не так, но make отказывается проверять временные метки зависимостей, когда make-файл выглядит так.
# This makefile won't update the objects if you modify the .cpp files
# and it will only create them if they do not exist.
CC=g++
FL=-g
OBJECTD=../obj
SOURCED=../src
# Get all .cpp files in ../src
SOURCES=$(wildcard *.cpp)
# Convert .cpp to .o then add ../obj in front
OBJECTS=$(addprefix $(OBJECTD)/,$(patsubst %.cpp,%.o,$(SOURCES)))
# You sir must execute yourself whether you like it or not
.PHONY:all
all:$(OBJECTS)
@echo : Leaving `src`
# This wont work as expected ...
# @echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
# echoes Compiling logger.cpp
# But $(notdir $(patsubst %.o,%.cpp,$@)) will not be parsed
# correctly
$(OBJECTS):$(notdir $(patsubst %.o,%.cpp,$@))
@echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
@$(CC) $(FL) -c $(notdir $(patsubst %.o,%.cpp,$@)) -o $@
Я считаю, что он просто не примет $(notdir $(patsubst %.o,%.cpp,$@))
хотя в документации указано, что
В шаблонном правиле, имеющем несколько целей (см. Введение в шаблонные правила), «$ @» - это имя той цели, которая вызвала выполнение рецепта правила.
Выполнение компиляции для каждого файла по отдельности отлично работает.
Например:
../obj/logger.o:logger.cpp
@echo : Compiling $<
@$(CC) $(FL) -c $< -o $@
+ ------------ +
: eXtra nfo:
+ ------------ +
Я пытаюсь прочитать источники из текущего каталога, проверить, изменились ли они, если они есть, приступить к их компиляции, помещая объекты в ../obj вместо текущего каталога.
Это make-файл, расположенный в ../src, есть еще один файл для связывания в родительском каталоге.
Графическое представление структуры, над которой я хочу работать
+--- Parent Directory ------+
| | | |
| | | |
bin obj inc src