2013-02-20 20 views
5

Mam Makefile, który działa idealnie sprawdził z nowej powłoki, tj:Wywołanie zrobić od wewnątrz makefile

make -C /dir/ 

Jednakże, jeśli zgłoszę to Makefile z inny Makefile, to nie ze względu na niektóre skomplikowane problemy z zależnościami. Wyraźnie ma wiedzę o zagnieżdżonych wywoływaniach, co widać na wydruku make[1]: itd. I podejrzewam, że make w jakiś sposób dzieli zmienne z procesem potomnym.

Czy mimo to należy wywołać make clean z pliku Makefile? Jeśli moja kompilacja działa z czystej powłoki, powinno być możliwe wywołanie jej z innej Makefile bez odwoływania się do horroru w skrypcie! :)

Dzięki!

+0

To nie jest łatwe. Czy masz na myśli, że makefile_1 nie działa, gdy jest wywoływany z pliku * specific * makefile_2 lub * any * innego pliku makefile (takiego jak trywialny, który nie robi nic innego)? – Beta

+0

Hmmmm, dziwne. Porównaj wyjście 'make -p' w każdym przypadku. (Oczywiście zawsze uruchamiam _make_ z '-Rr' i' --warn'-YMMV.) – bobbogo

Odpowiedz

8

make Rzeczywiście udostępnia niektóre z jego środowiska, gdy jest wywoływana rekursywnie. Jak zasugerowano w https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion, może chcesz napisać rekurencyjne wywołanie w ten sposób:

sub-make: 
     $(MAKE) -C /dir/ MAKEFLAGS= 

i sprawdzić, czy to pomaga. Można również kontrolować zmienne, które są eksportowane do sub-zrobić za pomocą export i unexport dyrektyw (https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion)

1

Było kilka zmiennych środowiskowych w makijażu rozmówcy, który wybuchł markę wywoływanego (CFLAGS etc ...)

Moim rozwiązaniem było odróżnienie środowiska w czystej powłoce i od miejsca połączenia. Następnie ręcznie dodałem zmienne problemu do listy i utworzyłem niektóre skrypty save_env/restore_env.

Dzięki!

Powiązane problemy