【问题标题】:CMake doesn't see system variableCMake 看不到系统变量
【发布时间】:2015-08-05 22:08:46
【问题描述】:

为什么 CMake 看不到我的系统变量?

if (NOT DEFINED $ENV{QT_LIBS_DIR})
  message(FATAL "You need to have system-wide variable with path to Qt libs")
  set(QT_CMAKE_MODULES_FOUND FALSE)
elseif(NOT DEFINED $ENV{QT_LIBS_DIR})
  set(QT_CMAKE_MODULES "$ENV{QT_LIBS_DIR}/lib/cmake" CACHE PATH "CMake's modules which provided by Qt itself for Qt bindings")
  set(QT_CMAKE_MODULES_FOUND TRUE)
endif(NOT DEFINED $ENV{QT_LIBS_DIR})

我遇到了致命错误。请帮我调查一下。顺便说一句:

$ echo $QT_LIBS_DIR

输出为:/home/drew/Qt/5.5/gcc_64

【问题讨论】:

    标签: c++ qt cmake


    【解决方案1】:

    为了检查环境变量,我使用if ("$ENV{QT_LIBS_DIR}" STREQUAL "") 来查看是否定义了环境变量。所以你的例子变成了:

    if ("$ENV{QT_LIBS_DIR}" STREQUAL "")
      message(FATAL "You need to have system-wide variable with path to Qt libs")
      set(QT_CMAKE_MODULES_FOUND FALSE)
    elseif()
      set(QT_CMAKE_MODULES "$ENV{QT_LIBS_DIR}/lib/cmake" CACHE PATH "CMake's modules which provided by Qt itself for Qt bindings")
      set(QT_CMAKE_MODULES_FOUND TRUE)
    endif()
    

    但是对于它的价值,我相信find_package for qt 根据它在您的路径中首先找到的 qmake 可执行文件获取 qt 的路径。这样你就不需要使用环境变量了。这适用于 qt4;详情请见How specify Qt version/location?

    对于 QT5,Qt5/CMake manual 表示“为了使 find_package 成功,必须在 CMAKE_PREFIX_PATH 下找到 Qt 5,或者必须在 CMake 缓存中将 Qt5_DIR 设置为 Qt5WidgetsConfig.cmake 文件的位置。使用 CMake 的最简单方法是将 CMAKE_PREFIX_PATH 环境变量设置为 Qt 5 的安装前缀。”

    【讨论】:

    • 谢谢@Phil。关于您的评论:我没有通过包管理器安装 qt。所以即使whereis qmake 也会导致我清空输出。
    • Qt 不需要安装。您可以在许多不同的位置拥有多个版本的 qt。除非您已将文件集剥离到最低限度,否则您应该在某处拥有bin/qmake。对于 qt4,只需将其放在您的 PATH 中,find_package 应该正确设置 qt 的 cmake 变量。对于 Qt5,只需将 -DQt5_DIR 添加到您的命令行以进行 cmake 配置步骤,find_package 应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    相关资源
    最近更新 更多