Re: [Lug-bg] Makefile variables overrides
- Subject: Re: [Lug-bg] Makefile variables overrides
- From: Румен Петров <help@xxxxxxxxxxxxxxxxx>
- Date: Mon, 14 May 2012 02:22:56 +0300
Georgi Chorbadzhiyski wrote:
Имам 2 Makefile [1], [2]. При пускане на make както се очаква резултат е:
CROSS=sh4-linux-
При пускане на make CROSS=blah резултатът пак е:
CROSS=sh4-linux-
/CROSS се сетва два пъти, защото $(MAKE) е еквивалента на това,
което е изпълнено като "make xxxxxx" и разбира се се получава
make CROSS=blah --no-print-directory -f Makefile2 CROSS=sh4-linux-/
Искам да мога при дадените Makefile's да изпълня make CROSS=blah
и вторият Makefile да получи CROSS=blah променлива. Ефективно да
мога да override-на променливите които задавам на командният ред
при викането make.
Идеи?
[1]: Makefile
-----cut-----
all: test
test:
@$(MAKE) --no-print-directory -f Makefile2 CROSS=sh4-linux-
-----cut-----
[2]: Makefile2
-----cut-----
all: show
show:
@echo CROSS=$(CROSS)
-----cut-----
За припокриване на макросите, наречени променливи в документацията на
ГНУ make, може да се използва следното:
================================
all: test
CROSS?=sh4-linux-
test:
$(MAKE) -f Makefile2 CROSS=$(CROSS)
================================
Номера би трябвало да мине и на позабравени ОС с малка промяна $(MAKE)
-e ....
Ако има притеснения от макрос във вида CROSS?=sh4-linux-, то става и така:
================================
all: test
CROSS=sh4-linux-
test:
$(MAKE) -f Makefile2 CROSS=$${CROSS-$(CROSS)}
================================
Примера отново е без -е флаг, защото на почти неизползвани ОС може да се
ползва и така:
CROSS=$${CROSS-$(CROSS)} \
$(MAKE) -f Makefile2 CROSS=$${CROSS-$(CROSS)}
Горните примери работят и с CROSS=нещоси make, което не сработва при
правило от вида $(MAKE) ..... $(MAKEFLAGS)
Румен
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|