Jak mohu ignorovat přiřazení řádku proměnnou příkazu v rekurzivní sestavení?

hlasů
6

Snažím se lepit dva budování systémů dohromady. Oba jsou rekurzivní (pravidla při používání makefile make volat další makefiles vybudovat součásti projektu).

Já jim budu říkat ‚A‘ a ‚B‘, kde ‚A‘ staví žádost a ‚B‘ staví knihovny používané ‚A‘.

Hladina Makefile špičku v A volá ‚make target = cokoli‘, což znamená, že všechny rekurzivně-odvolává bitů sestavení zdědí hodnotu TARGET jako Proměnná pouze ke čtení, včetně sestavení systému od B, který je nazýván jako součást rekurzivní sestavení.

Nechci, aby se to stalo v sestavení systému ‚B‘ (který pochází z jiného projektu), protože makefiles tam použít cíl pro své vlastní účely a build selže, protože TARGET má nesprávnou hodnotu a je jen pro čtení.

Vidím jen dvě řešení tohoto, z nichž ani jeden není palettable;

1) Přejmenovat cíl něco jiného v makefile v A, které ji stanoví av makefiles v části A, které ji používají, aby se zabránilo střetu s nižšími úrovněmi sestavení systému.

2) Použijte ‚potlačení‘ Směrnice všude v makefile v B, kde se stanovila za cíl proměnná, přepisovat pouze pro čtení stavu.

Každý, kdo má lepší nápad? - v ideálním případě chci nic se dědí sestavení systému B se z bodu A, s výjimkou těch variant I výslovně předat B sestavení systému z A.

Mimochodem, já používám GNU Udělat v3.80.

Položena 01/06/2009 v 15:02
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
3

Dalo by se nastavit MAKEOVERRIDES nic v makefile druhé úrovně v A.

callb:
      cd subdir && $(MAKE) MAKEOVERRIDES=

To prochází dolů normální příkazové parametry jako -k a -s ale ne příkazové definice proměnných.

Nebo můžete použít historické MFLAGS což je stejné jako MAKEFLAGS kromě MFLAGS neobsahuje příkazové definice proměnných.

callb:
     cd subdir && $(MAKE) $(MFLAGS)

Podrobnosti o těchto dvou možností je možné přečíst zde: GNU provádět manuální

Odpovězeno 03/06/2009 v 19:06
zdroj uživatelem

hlasů
0

Zní to, jako byste upravili Makefile rekurzivně vyvolání B makefile, a tak váš problém. Proč ne místo toho zavést nový toplevel Makefile, který rekurzivně vyvolá B makefile a pak rekurzivně vyvolá Makefile A? Například combined.mk:

all:
    $(MAKE) -f Makefile.B
    $(MAKE) -f Makefile.A

Tímto způsobem B makefile dědí nic z Makefile.

Odpovězeno 09/11/2011 v 23:10
zdroj uživatelem

hlasů
0

V místě, kde sestavení přenosový systém vyvolá vybudovat systém B, nepoužívat ‚ ${MAKE}‘ přímo; vyvolat shell skript, která vyvolá sestavení systému B (případně po dezinfekci prostředí).

Aby dosáhl chování, kdy jsou příkazy prováděného ‚ make -n‘ předponu příkazového řádku v makefile s ‚ +‘ (podobně jako prefixu řádku s ‚ @‘ nebo ' -‚).

Odpovězeno 03/06/2009 v 19:37
zdroj uživatelem

hlasů
0

Možná, že můžete použít „unexport“ směrnici, aby se zabránilo TARGET před šířeny makefile B je?

Odpovězeno 01/06/2009 v 16:53
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more