如何为特定的cmake命令添加别名

时间:2019-03-05 21:31:29

标签: bash shell

我正在尝试解决QtCreator错误(https://bugreports.qt.io/browse/QTCREATORBUG-20972),其中QtCreator无法打开CMake项目,因为它试图在/ tmp / RANDOM_PATH / socket中创建套接字文件,而“ RANDOM_PATH”没有存在。

我可以使用以下方法手动重现该问题:

  

$ / usr / bin / cmake -E服务器--pipe = / tmp / not-existing-path / socket   --experimental CMake错误:/ tmp / not-existing-path / socket内部错误:EACCES

https://bugreports.qt.io/browse/QTCREATORBUG-18444中的建议是创建cmake的别名,该别名将报告

  

“ serverMode”:false

输入命令

  

cmake -E功能

我的机器(Ubuntu 18.04)上哪个输出:

  

{“ generators”:[{“ extraGenerators”:[],“ name”:“ Watcom WMake”,“ platformSupport”:false,“ toolsetSupport”:false},{“ extraGenerators”:[“ CodeBlocks”,“ CodeLite”,“ Sublime Text 2”,“ Kate”,“ Eclipse CDT4”,“ KDevelop3”],“名称”:“ Unix Makefiles”,“ platformSupport”:false,“ toolsetSupport”:false},{“ extraGenerators”: [“ CodeBlocks”,“ CodeLite”,“ Sublime Text 2”,“ Kate”,“ Eclipse CDT4”],“名称”:“ Ninja”,“ platformSupport”:false,“ toolsetSupport”:false}],“ serverMode” :true,“ version”:{“ isDirty”:false,“ major”:3,“ minor”:10,“ patch”:2,“ string”:“ 3.10.2”,“ suffix”:“”}}

最简单的方法是什么?

我尝试添加这样的别名:

  

cmake ='cmake | sed“ s / \” serverMode \“:true / \” serverMode \“:false / g”'

,但是问题在于,“ sed”命令必须在给cmake的参数之后,而不是之前。

1 个答案:

答案 0 :(得分:2)

我从该错误报告中看到:

  

如果要在不使用服务器模式的情况下运行较新的cmake,则需要围绕cmake编写包装程序,以从报告的输出中删除服务器模式支持指示符。

     
cmake -E capabilities
  

那将是

cmake() {
    if [[ "$*" == "-E capabilities" ]]; then
        command cmake "$@" | jq -c 'del(.serverMode)'
    else
        command cmake "$@"
    fi
}

您必须使该脚本成为独立脚本而不是Shell函数。