просто для быстрой терминологии:
#basic makefile rule
target: dependencies
recepie
Проблема: я хочу автоматически создавать зависимости.
Например, я надеюсь включить это:
#one of my targets
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
В это:
#one of my targets
file.o: $(GENERATE)
$(COMPILE)
и я не уверен, возможно ли это.
Что я знаю:
Я могу использовать этот флаг компилятора:
g++ -MM file.cpp
и он вернет правильную цель и зависимость.
поэтому из примера он вернется:
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
однако, "make" НЕ позволяет мне явно писать код оболочки в разделе "цель" или "зависимость" правила:(
Я знаю, что есть функция "make", называемая shell
но я не могу полностью подключить это как зависимость и делать синтаксический анализ, потому что он полагается на макрос [email protected], который представляет цель.. или, по крайней мере, я думаю, что проблема в том, что проблема
Я даже попытался просто заменить зависимость "file.cpp" с этой функцией makefile, и это тоже не сработает.
#it suppose to turn the [email protected] (file.o) into file.cpp
THE_CPP := $(addsuffix $(.cpp),$(basename [email protected]))
#one of my targets
file.o: $(THE_CPP) 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
#this does not work
Таким образом, во всем Google есть два решения. оба из которых я не полностью понимаю.
Из GNU Make Manual
Некоторые сайты, которые говорят, что GNU Make Manual устарели
Итак, мой последний вопрос: возможно ли это сделать так, как я хочу это сделать,
а если нет, может кто-то сломать код с одного из этих сайтов и подробно объяснить мне, как они работают. Я буду реализовывать его одним из этих способов, если придется, но я устал, чтобы просто вставить патч кода в мой makefile, прежде чем понимать его