CMake的execute_process
命令似乎只能让你执行一个进程 - 而不是你可以提供命令shell的任意一行。问题是,我想使用管道,文件描述符重定向等 - 这似乎是不可能的。替代方案对我来说非常痛苦(我认为)......
我该怎么办?
PS - CMake 2.8和3.x答案很有意思。
答案 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)
execute_process command seems to only let you, well, execute a process - not an arbitrary line you could feed a command shell.
是的,确切地说这是用documentation写的那个命令:
所有参数都将VERBATIM传递给子进程。没有使用中间shell,因此shell运算符如>被视为正常的论点。
I want to use pipes
同一COMMAND
次调用中的不同execute_process
实际上是管道传输的:
运行一个或多个命令的给定序列,每个过程的标准输出通过管道输送到下一个标准输入。
file descriptor redirection, etc. - and that does not seem to be possible.
对于复杂的事情,只需准备单独的shell脚本并使用execute_process
运行它。您可以使用其参数或预先configure_file
将变量从CMake传递到此脚本。