在 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.txtout2.txt 文件中也能看到同样的内容。

不过,execute_process 的 COMMAND 不支持类似于 &&||> 等 Shell 运算符。因为 COMMAND 参数会以 argv 的形式传递给 exec 系统调用,来直接执行程序,并不是在 Shell 中运行程序。

其他的 execute_process 详细用法参见:execute_process — CMake Documentation