Ittay Dror wrote:


Jim Weirich wrote:

On Sep 6, 2008, at 2:21 AM, Ittay Dror wrote:

in make, if in my Makefile I have
FOO = 1
FOO += 2
test:
 echo $(FOO)

then running:
> make
1 2
> make FOO=3
3

That is, if passed in the command line, any assignments to FOO are ignored. In Makefile, this can be changed by using the 'override' method. It is not that important, just an idiom that people coming from Make expect. Obviously, Rakefile being Ruby this sort of behavior can be done.


I think if I had to do this, I would use an idiom like:

 ENV['FOO'] ||= 1
yes, but then ENV['FOO'] += 1 will increase FOO by one, which is not the Make behavior.

I really don't have control over how ruby variables are assigned. I'm not sure how to do it in rake for any arbitrary variable.

I didn't mean to do it for arbitrary variables, instead, accessing variables through an object that controls the behavior.

I don't think this in itself (mimicking the exact behavior of Make) is worth the hassle, but providing a nicer interface to dealing with command line variables might be, for example, if the object controlling variables also knows how to handle 'FOO+=a' and 'FOO-=b' in the command line, it could be a nice feature, mainly for C/C++ builds.
unfortunately, this cannot be done currently, since rake uses the Regexp /^(\w+)=(.*)$/ to match command line variables, which doesn't apply to things like F+++=a or FOO-=b. Instead, they are interpreted as task names. This is also the case for 'foo.bar=val' (dotted variables are common in java)

In general, I think it is better to use the regexp /^(.+)=(.*)$/, restricting task names to not use '=' and allowing more characters in variable names.

Ittay

If you like, since I need such behavior anyway, I can post it when it is ready.

Ittay


--
--
Ittay Dror <[EMAIL PROTECTED]>


_______________________________________________
Rake-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rake-devel

Reply via email to