【问题标题】:Parse error. Function missing ending ")" CMAKE [duplicate]解析错误。函数缺少结尾“)”CMAKE [重复]
【发布时间】:2017-06-23 15:27:31
【问题描述】:

我想从execute_process 的标题中提取一个字符串。 但是该命令有一个错误,我尝试了很多东西,总是同样的错误。

execute_process( COMMAND 猫 $(version_h) | grep -a "定义我的版本" |剪切 -d " " -f3 |剪切 -d '"' -f2`

OUTPUT_VARIABLE_Version)

如果我在控制台行中编写命令,则没有问题。

错误提示:“解析错误。函数缺少结尾“)”。而是找到带有文本“的未终止字符串” "

【问题讨论】:

  • CMake 中的变量通过以下方式访问${Variable}。请注意花括号。
  • 您的帖子中 f2 之后似乎还有一个额外的反引号。这是复制错误还是命令的一部分?
  • 我需要在 cat 之前和 f2 之后设置“`”,但它是用于 stackoverflow 中的写入命令。示例:command
  • 我认为这是一个转义字符的问题,因为如果我写'\"',则配置完成。
  • @sovif: Backtricks ("`") 用于inline code格式,格式multiline code使用(选择代码)工具按钮{}Ctrl+K 键。

标签: cmake


【解决方案1】:

execute_process() 只处理进程及其参数,即不涉及 shell。

所以,您有两个主要选择:

  1. execute_process(COMMAND bash -c "..." OUTPUT_VARIABLE _Version)
  2. execute_process(COMMAND cat ... COMMAND grep ... COMMAND cut ... COMMAND cut ... OUTPUT_VARIABLE _Version)

在第二个版本中,命令的标准输出和标准输入链接在一起。

如果你想做更复杂的事情,你必须创建一个单独的脚本并以面向进程而不是 shell 的方式调用它,即选项 1。

【讨论】:

    【解决方案2】:

    问题是我需要删除引号字符,我猜 Cmake 和 bash 命令存在混淆。

    execute_process(COMMAND cat ... COMMAND grep ... COMMAND cut ... COMMAND cut -c2- COMMAND rev COMMAND cut -c2- COMMAND rev OUTPUT_VARIABLE _Version)

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 2018-12-11
      • 1970-01-01
      • 2017-08-19
      • 2016-12-22
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多