Re: one shell command doesn't return result

fabien <[email protected]>
Newsgroups gmane.comp.gnu.make.windows
Message-ID <[email protected]>
Thank you very much !

Eli Zaretskii a écrit :
>> Date: Sun, 15 Jun 2008 16:34:16 +0200
>> From: "[email protected]" <[email protected]>
>>
>> I would like to make a simple calculation in my makefile, but I have a strange problem.
>> On windows, I use the DOS command "set /A 3*100+13/2", it works on a shell and returns "306" but not in my makefile. I have make a simple makefile to test it :
>>
>> --------------------------------------------------
>> # command to make a mathematical operation
>> CMD_MATH:=$(shell set /A 3*100+13/2)
>> # command to list files
>> CMD_FILES:=$(shell dir /b/a-d/-W)
>>
>> all::
>> 	@echo CMD_MATH:$(CMD_MATH)
>> 	@echo CMD_FILES:$(CMD_FILES)
>> --------------------------------------------------
>>
>> It returns me :
>>
>> --------------------------------------------------
>> CMD_MATH:
>> CMD_FILES:Makefile Makefile~
>> --------------------------------------------------
>>
>> One command returns correctly the result but not the command "set /A" which returns nothing.
>> I have GNU Make 3.81
> 
> This is expected behavior.  "set /?" has this small print among its
> text:
> 
>     If SET /A is executed from the command line outside of a command
>     script, then it displays the final value of the expression.
> 
> Note the "outside of a command script" condition: this is the cause of
> your surprise.  When Make uses cmd.exe as the shell, it invokes all
> the commands through temporary batch files (a.k.a. command scripts);
> you can see that if you invoke Make with the --debug=j switch.  And
> when "set /a" is invoked from a batch file, it does not print the
> result.
> 
> The following trick will do what you want:
> 
>   CMD_MATH:=$(shell cmd.exe /c "set /A 3*100+13/2")
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.