为什么Travis无法在脚本中识别已安装的CMake?

丹尼尔

我正在尝试为我的应用程序编写一个Travis CI脚本,该脚本需要CMake 3.5或更高版本。整个Travis脚本可在此处找到遵循在其他地方找到的建议,我使用以下命令安装CMake:

 install:
    - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
    - mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}

    - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
        CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz";
        mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake;
        export PATH=${DEPS_DIR}/cmake/bin:${PATH};
      else
        brew outdated cmake || brew upgrade cmake;
      fi
    - cmake --version

然后,我matrix用各种OS /编译器组合填充了构建,最后运行了Python安装脚本(请参阅此处):

before_script:
    - cd "${TRAVIS_BUILD_DIR}"

script:
    - ./install.py --compiler=$COMPILER

该Python脚本本质上只是调用cmakemake,第一CMakeLists.txt,可以找到这里

使用Homebrew安装CMake的OSX版本可以完美运行。但是,script由于CMake不满足最低要求,所有Linux构建都在此阶段失败

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.5 or higher is required.  You are running version 3.2.2

即使在以下期间成功安装了CMake 3.7 install

$ cmake --version
cmake version 3.7.2

我究竟做错了什么?

奇怪的是,使用的是预先安装的CMake版本(在Travis上为v3.2),而不是较新的版本-但仅当从Python调用时才使用。

您可以尝试以下方法:

解决方案1:删除Travis随附的CMake

这将阻止使用旧版本。如果这不起作用(例如,可能因为“找不到Cmake”),这将显示问题的实际原因。

您可以将其添加到该install步骤的linux分支中

sudo apt-get purge cmake

要么:

sudo apt-get remove cmake

(可能需要添加-y以进行确认,因此变为remove -y)。

解决方案2:使用CMake安装程序

通过CMake安装程序进行安装是一种更干净的方法。事实证明它是Travis btw上速度更快的一款。

...
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
    CMAKE_INSTALLER=install-cmake.sh
    curl -sSL https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.sh -o ${CMAKE_INSTALLER}
    chmod +x ${CMAKE_INSTALLER}
    sudo ./${CMAKE_INSTALLER} --prefix=/usr/local --skip-license
  else
    ...

我使用curl而不是wget + travis_retry,但这无关紧要。您仍然可以像以前一样使用它们。


如果两者都不起作用,则应检查Python脚本在何处查找可执行文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在我的脚本中Dir无法识别为方法?

为什么TypeScript无法识别已安装的TypeScript node_modules?

为什么Telescope中的Iron-Router无法识别已传递的_id参数?

为什么 cmake 找不到已安装的软件包?

为什么sssd是无法识别的服务,即使它已安装并可以重新启动?

为什么Powershell无法在Windows服务调用的脚本中识别cmdlet?

为什么批处理脚本中的命令“无法识别”并可以手动执行?

为什么我的脚本中的 unix 核心实用程序无法识别空格?

为什么我的 bash 脚本无法识别 date 命令中的变量?

Manjaro中的VScode无法识别已安装的JDK

已安装Scrapy,但在命令行中无法识别

Atom 无法识别 VirtualENV 中已安装的模块

为什么我的Django项目无法识别设置中安装的应用程序?

为什么在scala中无法识别proc?

为什么无法识别安装在python目录中的模块,却不能识别anaconda3下的模块?

F#:为什么脚本文件无法识别模块?

为什么我的Bash脚本无法识别别名?

为什么Stack无法识别它刚刚安装的依赖项?

为什么在安装conda之后Tensorflow无法识别我的GPU?

为什么Ubuntu安装程序无法识别我的SSD?

已安装的npm已安装模块无法被角度识别

maven 无法识别码头已安装

终端无法识别已安装的程序

Silverlight 5.0无法识别为已安装

ipython无法识别已安装的PySide?

已安装的 Python 包无法识别

PyCharm 无法识别已安装的包

为什么.JSX脚本无法识别要批量调整大小的文件夹中的每个图像?

为什么无法识别路线?