Sat 17 Jul 2010 03:31:34 PM UTC, comment #6:
Interesting to findout which way will work faster. Many generated pattern rules? or PAttern rule with multiple masks
But in general I agree with Paul and Boris. Current make is flexible enough to generate common parts
Let me give you real life example of power of make
# build/ase/%.c => build/xlc/%.sc.o
$(eval $(call qib_compiler_generate_object_rules,c,$(qib_ase_tgt_dir),$(qib_ase_src_suffix)))
# %.cpp => build/xlc/%.cpp.o
$(eval $(call qib_compiler_generate_object_rules,cxx,,$(qib_cxx_src_suffix)))
# %.c => build/xlc/%.c.o
$(eval $(call qib_compiler_generate_object_rules,c,,$(qib_c_src_suffix)))
#
qib_compiler_generate_object_rules=\
$(foreach qib_compiler_type_,$(qib_compiler_supported_types),\
$(foreach qib_compiler_variant_,$(qib_compiler_supported_variants),\
$(call qib_compiler_object_rule,$1,$2,$(QIB_DATABASE),$(qib_compiler_type_),$(qib_compiler_variant_),$3)\
)\
)
# define gets 6 parameters!!!
define qib_compiler_object_rule
$$(qib_compiler_$4_dir)$5/%$6$$(qib_compiler_obj_suffix) : qib_real_source=$$(patsubst $$(qib_compiler_$4_dir)$5/%$$(qib_compiler_obj_suffix),%,$$(@))
$$(qib_compiler_$4_dir)$5/%$6$$(qib_compiler_obj_suffix) : $2%$$(qib_$1_src_suffix)
$$(call qib_debug_echo,$1,\
$$(if $$(qib_coverage_tgt_dir),$$(qib_posix_mkdir) $$(dir $$(@)) &&)\
$$(call qib_$1_$4_make,$$(@),$$(<),$5,$3)\
)
$$(qib_compiler_$4_dir)$5/%$6$$(qib_compiler_obj_suffix).out :: $$(qib_compiler_$4_dir)$5/%$6$$(qib_compiler_obj_suffix)
endef
|