构建libssh项目-目标模式不包含'%'

时间:2019-01-02 17:50:36

标签: makefile cmake syntax-error

我正在尝试使用提供的install.readme中的指示将libssh-0.8.5安装到Ubuntu 16.04上。我按照说明执行了每个步骤,但是执行make命令构建项目后出现错误。错误如下:

[ 65%] Built target exec
tests/CMakeFiles/ssh_ping.dir/flags.make:8: *** target pattern contains no '%'.  Stop.
CMakeFiles/Makefile2:1696: recipe for target 'tests/CMakeFiles/ssh_ping.dir/all' failed
make[1 ]: *** [tests/CMakeFiles/ssh_ping.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

Image of Error

我已经研究发现,这可能是我的make文件中某处出现语法错误,导致构建无法继续进行。我查看了给出问题的目标make文件,但似乎无法确定导致错误的原因。

flag.make文件如下:

  

Flag.make file

问题似乎来自于突出显示的粗线。谁能看到我想念的东西?

2 个答案:

答案 0 :(得分:2)

在StackOverflow(以及大多数其他类似的网站)上,请剪切文本并将其粘贴到您的问题中,并使用适当的降价工具设置其格式,而不是附加包含文本的图像。后者很难阅读,我们无法将其剪切并粘贴到答案中以显示出问题所在。

您不能在换行符的生成文件中嵌入换行符。 Make完全面向行,根本不分析引号。为此:

FOO = "bar
biz"

不被认为是将包含换行符的值分配给变量FOO的一行。相反,它被认为是两行,第一行是将值"bar赋给变量FOO,第二行是语法错误,因为make无法将字符串baz"解析为有效的命令。

答案 1 :(得分:0)

显然ssh没有正确安装在您的平台上,而cmake依赖它。我很惊讶cmake本身在生成flag.make时没有引发错误,但是由于我不使用cmake,所以我不知道它是否是正常行为。 / p>

无论如何,当cmake尝试检测您的OpenSSH版本时,它是通过运行ssh来完成的,并收到一条错误消息,而不是所需的版本号。此错误消息已插入到生成的flag.make Makefile中。因为此错误消息的第二行(如果您的问题不在图片中,我可以在此处复制粘贴)

a: b: c

窗体,make试图将其解释为static pattern rule,但由于它不包含%通配符,因此make出现语法错误。

如果您尝试在命令行上运行/usr/bin/ssh -V会怎样?