Próbuję zaimplementować nierekurencyjny system kompilacji make w moim bieżącym projekcie. Z czym walczę to zakresy zmiennych. Docelowe zmienne nie pasują do moich potrzeb, ponieważ często zmienne definiują cele, a nie wymagania wstępne. Co potrzebne jest:GNU Make. Zmienne o zakresie ograniczonym do pojedynczego pliku Makefile
Makefile1:
SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Makefile2:
#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here
a wyjście chcę to 'original_value'.
Czy istnieją jakieś strategie, które sprawią, że będzie on prawdziwy?
EDIT: Jedynym rozwiązaniem doszedłem do momentu jest życie i zorganizować sobie umieścić wszystkie Pakiet obejmuje w końcu poszczególnych Makefile i użyć natychmiastowej zmiennej przypisania: =
To rozwiązanie brzmi całkiem nieźle. Co jest z tym nie tak? A czym jest 'SOMEVAR', do czego służy? – Beta
W tym rozwiązaniu nie podoba mi się to, że jest bardzo chwiejny. Jeśli jakiś biedny facet, który zajmie moje miejsce, nie dostanie pomysłu i miejsce to gdzieś indziej, dostanie mnóstwo niespodzianek. –
Jeśli Makefile2 jest zawarty więcej niż jeden raz i definiuje przepis, który odwołuje się do '$ (SOMEVAR)' , wtedy przerwie się okropnie --- zmienne w recepturach są oceniane podczas wykonywania receptur, co oznacza, że wszyscy zobaczą ostatnią wartość '$ (SOMEVAR)', a nie wartość, jaką posiadali, gdy receptura została zdefiniowana. –