makefile中使用powershell && 使用powershell进行数学计算

在makefile中使用shell命令,格式为:$(shell 命令)。例如:$(shell pwd),用来获取当前路径。

但是只有在Linux下直接使用有效,在Windows下使用会出现错误,不过,GNU/make提供了指定shell的功能。例如,如果想要将cmd作为shell,可以这样:

SHELL=cmd

当然,使用方法也要稍微修改一下,比如获取当前路径,由于cmd中没有pwd命令,但可以使用:echo %cd%。所以要修改为:

$(shell echo %cd%)

我不知道是bug还是我的用法有错误,make似乎不支持将shell修改为powershell,如果设置了“SHELL=powershell”,在使用$(shell pwd)时会出现如下错误:

process_begin: CreateProcess(NULL, pwd, ...) failed.
make: Makefile:156: pipe: No such file or directory

这意味着传递给CreateProcess()函数的参数不正确。此函数的第一个参数为程序,第二个参数为命令。在在错误中可以看到,程序变成了NULL,使得CreateProcess()不知道创建什么进程。要改成如下形式才能正常工作:$(shell powershell pwd),而且这样也不用指定shell了。但是有一个问题是,$(shell powershell pwd)明显要比指定了cmd后使用$(shell echo %cd%)慢,或许是每次执行命令都需要创建一个新的powershell进程所致。我暂时不知道怎么解决,因此只能在cmd不支持的命令时用powershell。

make本事没有计算的功能,需要调用shell来完成。例如:

TEST1=2
TEST2=($(TEST1)*20)    
#make没有计算功能,因此TEST2=(2*20),而不是40,如果使用此定义的程序没有计算功能,就可能出错。

如果使用powershell,可以这样:

TEST1=2

TEST2=$(shell powershell $(TEST1)*20)

#这样,TEST2=40

但是powershell默认数值运算输出为10进制,如果要使用16进制,就需要进行转换:

TEST1=0x1234

TEST2=$(shell powershell (TEST1+0x1000).ToString(\'x\'))
#TEST2=2234
#输出带0x的16进制字符串

TEST3=$(shell powershell (\'0x\'+(TEST1+0x1000).ToString(\'x\')))

#记得引号要使用转义符,"'"=>"\'"。否则执行会出错

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值