cmake:使用execute_process调用shell命令或脚本

本文详细介绍了CMake中execute_process命令的使用方法,包括如何调用shell命令或脚本,设置工作目录,超时时间,以及如何处理命令的输出和错误信息。并通过实例展示了execute_process在实际场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake可以通过execute_process调用shell命令或者脚本,其原型如下:

execute_process(COMMAND <cmd1> [args1...]]
                [COMMAND <cmd2> [args2...] [...]]
                [WORKING_DIRECTORY <directory>]
                [TIMEOUT <seconds>]
                [RESULT_VARIABLE <variable>]
                [OUTPUT_VARIABLE <variable>]
                [ERROR_VARIABLE <variable>]
                [INPUT_FILE <file>]
                [OUTPUT_FILE <file>]
                [ERROR_FILE <file>]
                [OUTPUT_QUIET]
                [ERROR_QUIET]
                [OUTPUT_STRIP_TRAILING_WHITESPACE]
                [ERROR_STRIP_TRAILING_WHITESPACE])

按指定的先后顺序运行一个或多个命令,每个进程的输出通过管道连接作为下一个进程的输入。所有的进程使用单个的标准错误输出管道。
如果指定了WORKING_DIRECTORY,则指定的目录将作为子进程当前的工作目录。

如果指定了TIMEOUT值,则如果在指定的时间内(以秒为单位计算,允许有小数位)子进程执行仍未完成,则将会被中断。

如果指定了RESULT_VARIABLE变量,则最后命令执行的结果将保存在该变量中,它是最后一个子进程执行完后的返回值或描述某种错误信息的字符串。

如果指定了OUTPUT_VARIABLE或ERROR_VARIABLE变量,则该变量会分别保存标准输出和标准错误输出的内容。

如果指定的变量是同一个,则输出会按产生的先后顺序保存在该变量中。

如果指定了INPUT_FILE,UTPUT_FILE或ERROR_FILE等文件名,则它们会分别与第一个子进程的标准输入,最后一个子进程的标准输出以及所有子进程的标准错误输出相关联。

如果指定了OUTPUT_QUIET或ERROR_QUIET,则会忽略标准输出和错误输出。如果在同一管道中同时指定了多个OUTPUT_*或ERROR_*选项,则优先级顺序是未知的(应避免这种情况)。

如果未指定任何OUTPUT_*或ERROR_*选项,则命令CMake所在进程共享输出管道。
 

例如:

1、执行shell命令

execute_process(COMMAND <一句shell命令> WORKING_DIRECTORY <这句shell命令执行的工作目录>)

2、执行shell脚本

execute_process(COMMAND sh test.sh WORKING_DIRECTORY <test.sh所在目录>)

注:在调用一个execute_process时可以顺序执行多条COMMAND命令。

扩展:在cmake中也可以通过add_custom_comand 和 add_custom_target执行shell命令,但是他们是一般执行命令跟target的生成有关;而execute_process只是简单地在cmake执行编译之前调用shell命令,具体使用需要结合需求来选择!

add_custom_comand 和 add_custom_target可参考:https://blog.youkuaiyun.com/fuyajun01/article/details/8907207

参考:cmake官网https://cmake.org/cmake/help/v3.7/command/execute_process.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值