问题描述: 最近使用arm官方提供的arm-ostl-linux-gnueabi-gcc
编译cmake工程时,发现需要执行三次cmake
才能编译成功,但将其部署到Jenkins中项目(使用pipeline)总是编译失败。
原因分析: Jenkins在执行shell脚本时加了-xe
参数
-x
:打印每一行执行到的命令-e
:当任何命令以非零值(当任何命令失败时)退出代码时,终止执行shell脚本
也就是说,只要指令执行报错,会返回一个非零值,检测到这个非零值,脚本就exit了
解决方案:
在需要报错继续执行的位置加入set +e
指令,之后为了能正常报错,再恢复原有错误退出机制,即使用set -e
指令。
案例如下:
set +e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
set -e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
cmake --build .
但是我不想看前两条的报错信息,那么可以将终端输出流向一个文件:
set +e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. >NULL 2>&1
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. >NULL 2>&1
set -e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
cmake --build .
嗯舒服了~
参考链接:
- https://blog.csdn.net/qq_28686911/article/details/115732506
- https://www.cnblogs.com/edgar-xie/p/13890883.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)