cmake(三十九)Cmake之execute_process指令
一
用途:执行一个或多个子进程
场景:通过git命令读取版本号,在代码中使用;列出某些文件的名称在代码中使用
1) 按指定的先后顺序运行一个或多个命令
特点:每个进程的输出通过管道连接作为下一个进程的输入
2) 所有的进程使用单个的标准错误输出管道
3) 如果指定了WORKING_DIRECTORY,则指定的目录将作为子进程当前的工作目录
4) 如果指定了TIMEOUT值,则如果在指定的时间内(以秒为单位计算,允许有小数位)子进程执行仍未完成,则将会被中断
5) 如果指定了RESULT_VARIABLE变量,则最后命令执行的结果将保存在该变量中,它是最后一个子进程执行完后的返回值或描述某种错误信息的字符串
6) 如果指定了OUTPUT_VARIABLE或ERROR_VARIABLE变量,则该变量会分别保存标准输出和标准错误输出的内容
备注:如果指定的变量是同一个,则输出会按产生的先后顺序保存在该变量中
7) 如果指定了INPUT_FILE、OUTPUT_FILE、ERROR_FILE等文件名,则它们会分别与第一个子进程的标准输入,最后一个子进程的标准输出以及所有子进程的标准错误输出相关联
8) 如果指定了OUTPUT_QUIET或ERROR_QUIET,则会忽略标准输出和错误输出
9) 如果在同一管道中同时指定了多个OUTPUT_*或ERROR_*选项,则优先级顺序是未知
备注:应避免这种情况
10) 如果未指定任何OUTPUT_*或ERROR_*选项,则命令CMake所在进程共享输出管道
二 执行shell命令
++++++++++(1)执行shell命令++++++++++
execute_process(COMMAND echo "$ENV{PATH}" WORKING_DIRECTORY <这句shell命令执行的工作目录>)
备注:cmake里面是无法通过"${PATH}"形式获取环境变量
++++++++++(2)执行shell脚本++++++++++
execute_process(COMMAND sh ceshi.sh WORKING_DIRECTORY <ceshi.sh所在目录>)
备注:在调用一个execute_process时可以顺序执行多条COMMAND命令
补充:python或其它命令
三 区别
1) 在cmake中也可以通过add_custom_comand和add_custom_target执行shell命令,但是他们是一般执行命令跟target的生成有关 备注:make的时候才会执行 2) execute_process只是简单地在cmake执行编译之前调用shell命令 备注:cmake的时候会执行
四 实践
git 的ssl证书问题
