我是靠谱客的博主 纯情毛豆,最近开发中收集的这篇文章主要介绍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')))

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

 

最后

以上就是纯情毛豆为你收集整理的makefile中使用powershell && 使用powershell进行数学计算的全部内容,希望文章能够帮你解决makefile中使用powershell && 使用powershell进行数学计算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部