概述
在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')))
#记得引号要使用转义符,"'"=>"'"。否则执行会出错
最后
以上就是纯情毛豆为你收集整理的makefile中使用powershell && 使用powershell进行数学计算的全部内容,希望文章能够帮你解决makefile中使用powershell && 使用powershell进行数学计算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复