help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

variable scope


From: Massimiliano Cialdi
Subject: variable scope
Date: Wed, 10 Mar 2010 10:59:42 +0100

Hi I have a problem with variable definition

Here is a semplified makefile that reproduce the problem (is also attached)
-------------8<-----------------------
TRG += target

target_COMPILE_SET = debug opt

target_debug_CSRC = ad.c
target_debug_CSRC += bd.c
target_debug_CSRC += cd.c

target_opt_CSRC = ao.c
target_opt_CSRC += bo.c
target_opt_CSRC += co.c

target_debug_FLAGS0 = td_flg
target_opt_FLAGS0 = to_flg

target_debug_FLAGS1 = td_flg
target_opt_FLAGS1 = to_flg

target_MCU = mcu

.PHONY: all

all:  target_debug target_opt

define build_target
$(info  marker1 $(0) ** $(1) ** $(2))
ifneq ($$(strip $$($(1)_VAR1)),)
$(1)_$(2)_FLAGS0 += $$($(1)_VAR1)
endif
$(1)_$(2)_FLAGS1 += $$($(1)_VAR1)
$(1)_$(2)_TRE = $$(foreach file,$$($(1)_$(2)_CSRC:%.c=%.o),$(1)/$$(file))

$(1)_$(2):
@echo P0 $(1) $(2) -- $($(1)_$(2)_CSRC) -- $$($(1)_$(2)_TRE)
@echo P1 $(1)_VAR1=$$($(1)_VAR1)
@echo P2 $(1)_$(2)_FLAGS0=$$($(1)_$(2)_FLAGS0)
@echo P3 $(1)_$(2)_FLAGS1=$$($(1)_$(2)_FLAGS1)
endef

define asdrubale
$(info  marker0 $(0) ** $(1))
$(1)_VAR1 = -param_$$($(1)_MCU)
$(foreach z,$($(1)_COMPILE_SET),$(eval $(call build_target,$(1),$(z))))
endef


$(foreach t,$(TRG),$(eval $(call asdrubale,$(t))))
-------------8<-----------------------

the output is:
marker0 asdrubale ** target
marker1 build_target ** target ** debug
marker1 build_target ** target ** opt
P0 target debug -- ad.c bd.c cd.c -- target/ad.o target/bd.o target/cd.o
P1 target_VAR1=-param_mcu
P2 target_debug_FLAGS0=td_flg
P3 target_debug_FLAGS1=td_flg -param_mcu
P0 target opt -- ao.c bo.c co.c -- target/ao.o target/bo.o target/co.o
P1 target_VAR1=-param_mcu
P2 target_opt_FLAGS0=to_flg
P3 target_opt_FLAGS1=to_flg -param_mcu

$(target_debug_FLAGS0) and $(target_debug_FLAGS1) shuold be the same (ando also $(target_opt_FLAGS0) and $(target_opt_FLAGS1).
it seems that
ifneq ($$(strip $$($(1)_VAR1)),)
$(1)_$(2)_FLAGS0 += $$($(1)_VAR1)
endif
doesn't work. It never add $$($(1)_VAR1) to $(1)_$(2)_FLAGS0, as if $$($(1)_VAR1) was empty, but is is not, infact it is assigned to $(1)_$(2)_FLAGS1

How can I resolve the problem?

thanks

Attachment: Makefile
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]