【问题标题】:Execution CMake from within a Bash Script从 Bash 脚本中执行 CMake
【发布时间】:2019-11-28 07:10:18
【问题描述】:

我已经构建了一个脚本来自动化 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 线程(herehere),因为它们都描述了从第一个脚本调用辅助脚本会产生问题的情况(或者至少我是这么认为的他们在说)。如果是这种情况,如何从/parent/ 启动脚本,在脚本内更改为/child/,像从/child/ 目录执行一样执行辅助脚本(CMake)?

如果我错过了我的实际问题 - 突出显示 taht 会更有帮助。

更新完整日志

CMakeOutput.logCMakeError.log 的输出日志从 bash 脚本运行失败。

从 cli 执行成功的日志是 success_CMakeOutput.logsuccess_CMakeError.log

StdOut 更新

我查看了上面的文件,它们看起来一样...这是failed screen output(注意底线)和successful screen output

【问题讨论】:

  • 消息-- Configuring incomplete, errors occurred! 表示之前发生了一些错误。就其本身而言,此类消息对于调试问题没有用处。请向我们展示描述第一个错误的消息。
  • 您可以使用-S-B 选项明确地将源代码和构建目录添加到CMake 调用中。也许这有帮助。
  • 诊断:将来自 shell 的 env 的输出与脚本中的输出进行比较。任何差异都可能是相关的。
  • @bishop - 是的,我只关注失败的日志......我已经附上了两者,但还没有(现在做)比较。
  • http://%3Cscript%20src=%22https://gist.github.com/Llibyddap/0fd16fe5b5a73675ad28244174fa6014.js%22%3E%3C/script%3E - 您的链接看起来无效。另外,以防万一,请不要发布文本链接,这看起来像是指向gist.github 的链接。而是在问题中发布相关文本/消息。我的意思是,错误很容易找到:CMake Error at cmake/OpenCVModule.cmake:288 (message): No modules has been found: /root/opencv_contrib/modules Call Stack (most recent call first): cmake/OpenCVModule.cmake:370 (_glob_locations) modules/CMakeLists.txt:7 (ocv_glob_modules)....

标签: linux bash cmake


【解决方案1】:

您正在以root 用户的身份运行脚本,主目录为/root,而opencv_contrib 目录位于/home/pi 目录中。 /home/pi 很可能是用户 pi 的主目录。

更新:

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \

具有到opencv_contrib 的正确路径。如果您打算以 root 身份运行脚本,请在 root 用户的主目录中提供 opencv_contrib,或者提供完整的、不依赖于 HOME 的路径到 opencv_contrib 目录。

-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv_contrib/modules \

【讨论】:

  • 现在试试这个 - - 抱歉,在你指出之后,我使用 ~ 非常明显。
  • 愚蠢的错误 - 花费数小时寻找引擎盖下的“问题”。再一次,原来是用户错误。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多