在 CMake 中 execute_process
函数可以执行系统命令。例如:
execute_process(
COMMAND echo Hello
)
COMMAND 接受的参数是一个 list,所以不要用双引号包裹。
execute_process
也支持运行多条命令,例如:
execute_process(
COMMAND echo Hello
COMMAND echo World
COMMAND echo Wow
)
仔细观察 CMake 的输出,会发现只输出了 Wow
,这是因为多个 COMMAND 之间是通过管道连接的。前一个 COMMAND 的输出会作为给下一个 COMMAND 的输入。例如下面的代码:
execute_process(
COMMAND echo Hello World
COMMAND tee out1.txt
COMMAND tee out2.txt
)
运行上面的 CMake 的脚本代码,我们能在命令行输出中看到 Hello World
,同时,在生成的 out1.txt
和 out2.txt
文件中也能看到同样的内容。
不过,execute_process
的 COMMAND 不支持类似于 &&
、||
、>
等 Shell 运算符。因为 COMMAND 参数会以 argv
的形式传递给 exec 系统调用,来直接执行程序,并不是在 Shell 中运行程序。
其他的 execute_process
详细用法参见:execute_process — CMake Documentation