help-make
[Top][All Lists]
Advanced

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

Re: loop to create variables, foreach?


From: Vardhan Varma
Subject: Re: loop to create variables, foreach?
Date: Wed, 01 Aug 2001 09:37:56 +0530

Is there any way to insert 'newline' at foreach's expansion.
e.g. i want to run COMMAND on each of the value.
Can i write:
        $(foreach v,$(VAR) COMMAND $a  \n)
        i can use ';' on unix, and '&' on command, but that
doesn't look clean. on win-nt, i want to run make in 'shell-less' mode,
i.e. without invoking sh or cmd.exe.

Also, can i define targets and depenency using foreach construct ?

Better than that, can make have a option, to always invoke
a preproceser ( m4 , cpp) over the makefile it reads. it's really
simple implementation wise ( fopen(file) ==> popen( "cmd file" ))

--Vardhan


At 03:20 AM 01-08-01, Paul D. Smith wrote:
%% Anton Deguet <address@hidden> writes:

  ad> I want to build multiple lists of files based on the same string
  ad> substitution using some kind of loop.  I tried something with foreach,
  ad> that is:

  ad> libs = lib1 lib2

  ad> lib1_cfiles_prefix = file1 file2 file3
  ad> lib2_cfiles_prefix = fichier1 fichier2 fichier3

ad> now I want to build some object lists called lib1_obj, lib2_obj, etc...
  ad> which would contain:

  ad> lib1_obj = my_bin_dir/file1.o my_bin_dir/file2.o my_bin_dir/file3.o
  ad> lib2_obj = my_bin_dir/fichier1.o my_bin_dir/fichier2.o  ...

The expansion of functions in general cannot themselves be complete make
command line such as variable settings.  And although this kind of works
in some limited conditions, they absolutely cannot expand to multiple
lines and have that work in any way.

This is the major new feature to be added in GNU make 3.80.

  ad> Can I force some kind of evaluation to set the variable during the
  ad> iteration of the foreach?

No.

  ad> Any other solution/suggestion is welcome.

You can create a rule which writes the results of the expansion out to a
file, then include that file in your makefile:

  include variable.mk

  variable.mk: Makefile
      @rm -f $@
      @for l in $(libs); do \
echo "$$l"'_obj = $$('"$$l"'_cfiles_prefix:%=my_bin_dir/%.o))' >> $@; \
       done

or something like that.  For the example you give here it's not really
clear to me that it's worth all this trouble, but maybe your actual code
is more complicated.

--
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          Find some GNU make tips at:
 http://www.gnu.org                      http://www.paulandlesley.org/gmake/
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist

_______________________________________________
Help-make mailing list
address@hidden
http://mail.gnu.org/mailman/listinfo/help-make

--
Vardhan Varma <address@hidden> ... till Yahoo is free


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com




reply via email to

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