开发者社区> 问答> 正文

从Bash脚本中执行CMake

我已经构建了一个脚本来自动化OpenCV4的CMake构建。脚本的相关部分写为:

install.sh

#!/bin/bash
#...
cd /home/pi/opencv
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=OFF ..

这部分代码首先从/home/pi/目录执行。如果我在cli中执行这些行,它们将起作用,并且cmake文件将被正确构建。如果我通过bash脚本运行相同的代码,则会cmake导致产生的命令-- Configuring incomplete, errors occurred!。

我认为这与这两个SO线程(此处和此处)相似,因为它们都描述了从第一个脚本调用辅助脚本会导致问题的情况(或者至少我认为他们在说这话)。如果是这种情况,如何从中启动脚本/parent/,更改为/child/脚本中的脚本,然后像从/child/目录中执行一样执行辅助脚本(CMake)?

如果我错过了我的实际问题-高亮显示htht会更有帮助。

使用完整日志更新

无法从bash脚本运行CMakeOutput.log和CMakeError.log的输出日志。

从cli执行时,成功的日志为success_CMakeOutput.log和success_CMakeError.log

在StdOut上更新

我浏览了上面的文件,它们看起来相同...这是失败的屏幕输出(注意底线)和成功的屏幕输出。

展开
收起
祖安文状元 2020-01-16 17:38:59 979 0
1 条回答
写回答
取消 提交回答
  • 您正在root使用/root主目录的用户身份运行脚本,而该opencv_contrib目录位于/home/pi目录中。该/home/pi是最有可能在用户的主目录pi。

    更新:

    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    
    

    有正确的道路opencv_contrib。无论是提供opencv_contrib在根用户的主目录下,如果你的目标是运行脚本作为根,或提供完整的,无依赖HOME,路径opencv_contrib目录。

    -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv_contrib/modules \
    
    2020-01-16 17:39:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载