Makefile (автоматическое создание зависимостей)

просто для краткой терминологии:

#basic makefile rule
target: dependencies
    recipe

Проблема: я хочу генерировать зависимости автоматически.

Например, я надеюсь превратить это:

#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)

и я не уверен, возможно ли это ..

Что я знаю:

Я могу использовать этот компилятор flag:

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' НЕ позволяет мне явно писать код оболочки в разделе цели или зависимости правила: (
{{ 1}} Я знаю, что есть функция make, называемая shell

, но я не могу подключить ее как зависимость и выполнить магию синтаксического анализа, потому что она полагается на макрос $ @, который представляет цель .. или по крайней мере, я думаю, что в этом проблема

Я даже попытался просто заменить зависимость "file.cpp" этой функцией makefile, и это тоже не сработало ..

#it's suppose to turn the $@ (file.o) into file.cpp
THE_CPP := $(addsuffix $(.cpp),$(basename $@))

#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

На каком-то сайте говорится, что руководство GNU Make устарело

Итак, мой главный вопрос: это можно сделать так, как я хочу,
, а если нет, может ли кто-нибудь сломать код одного из этих сайтов и подробно объяснить мне, как они работают.Я реализую это одним из этих способов, если потребуется, но мне надоело просто вставлять кусок кода в мой make-файл, прежде чем разбираться в нем

25
задан stimulate 27 February 2018 в 11:14
поделиться