CMake的execute_process和任意shell脚本

时间:2016-02-28 23:14:43

标签: shell command-line cmake

CMake的execute_process命令似乎只能让你执行一个进程 - 而不是你可以提供命令shell的任意一行。问题是,我想使用管道,文件描述符重定向等 - 这似乎是不可能的。替代方案对我来说非常痛苦(我认为)......

我该怎么办?

PS - CMake 2.8和3.x答案很有意思。

2 个答案:

答案 0 :(得分:13)

您可以使用shell的支持来执行任何shell脚本,以便在字符串参数中接收脚本。

示例:

execute_process(
    COMMAND bash "-c" "echo -n hello | sed 's/hello/world/;'" 
    OUTPUT_VARIABLE FOO
)

将导致FOO包含world

当然,你需要谨慎地逃避引号和反斜杠。还要记住,运行bash只能在拥有 bash的平台上运行 - 例如不是Windows。

答案 1 :(得分:6)

  1. execute_process command seems to only let you, well, execute a process - not an arbitrary line you could feed a command shell.
  2. 是的,确切地说这是用documentation写的那个命令:

      

    所有参数都将VERBATIM传递给子进程。没有使用中间shell,因此shell运算符如>被视为正常的论点。

    1. I want to use pipes
    2. 同一COMMAND次调用中的不同execute_process实际上是管道传输的:

        

      运行一个或多个命令的给定序列,每个过程的标准输出通过管道输送到下一个标准输入。

      1. file descriptor redirection, etc. - and that does not seem to be possible.
      2. 对于复杂的事情,只需准备单独的shell脚本并使用execute_process运行它。您可以使用其参数或预先configure_file将变量从CMake传递到此脚本。