Próbuję skleić dwa systemy kompilacji. Oba są rekursywne (reguły w makefile używają make, aby wywoływać inne pliki makefile w celu budowania komponentów projektu).Jak mogę zignorować przypisanie zmiennych wiersza polecenia w kompilacji rekurencyjnej?
Nazwiemy je "A" i "B", gdzie "A" buduje aplikację, a "B" kompiluje biblioteki używane przez "A".
Plik Makef najwyższego poziomu w wywołaniach A 'make TARGET = cokolwiek', co oznacza, że wszystkie rekursywnie wywoływane bity kompilacji dziedziczą wartość TARGET jako zmiennej tylko do odczytu, łącznie z systemem kompilacji od B, który jest wywoływane jako część kompilacji rekursywnej.
Nie chcę tego robić w systemie kompilacji dla "B" (który pochodzi z innego projektu), ponieważ pliki Makefile używają TARGET do własnych celów, a kompilacja się nie udaje, ponieważ TARGET ma złą wartość i jest tylko czytać.
Widzę tylko dwa rozwiązania, z których żaden nie jest paletą;
1) Zmień nazwę TARGET na coś innego w pliku makefile w A, który ustawia go i w plikach Makefile w A, który go używa, aby uniknąć konfliktu z niższymi poziomami systemu budowania.
2) Użyj dyrektywy "zastąp" wszędzie w plikach Makefile w B, gdzie ustawiono zmienną TARGET, aby nadpisać jej stan tylko do odczytu.
Ktoś ma lepsze pomysły? - Najlepiej, jeśli chcę nic być dziedziczone przez B. kompilacji systemu od A, z wyjątkiem tych opcji I jawnie przechodzą do systemu B budować od A.
Nawiasem mówiąc, używam GNU make v3.80.
Jeśli nie chcesz ustawiać CELU w pliku make pliku B, to dlaczego przekazujesz TARGET = cokolwiek w pliku makef użytkownika A? – JesperE
Plik makefile najwyższego poziomu przekazuje TARGET = cokolwiek do makefile drugiego poziomu w A (który tego potrzebuje), a plik makefile drugiego poziomu w A następnie wywołuje plik make B, który dziedziczy TARGET jako zmienną tylko do odczytu ze środowiska marka drugiego poziomu. –