【问题标题】:CMakeList set CMAKE_PREFIX_PATHCMakeList 设置 CMAKE_PREFIX_PATH
【发布时间】:2019-08-02 20:58:44
【问题描述】:

如果我跑步

cmake -DCMAKE_PREFIX_PATH=/home/rip/Qt/5.12.1/gcc_64/lib/cmake

一切正常。但是如果我写

set(CMAKE_PREFIX_PATH "/home/rip/Qt/5.12.1/gcc_64/lib/cmake")

CMakeLists.txt中只运行cmake,会出现如下错误信息:

Could not find a package configuration file provided by "Qt5Quick" with any
  of the following names:

   Qt5QuickConfig.cmake
   qt5quick-config.cmake

这是完整的代码:

set(CMAKE_CXX_FLAGS " -O3 -fopenmp")
set(CMAKE_PREFIX_PATH "/home/rip/Qt/5.12.1/gcc_64/lib/cmake")

project(${PROJECT_NAME} LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(SOURCES main.cpp Test5.cpp )
set(HAEDERS Test5.h )
set(RESOURCES qml.qrc )

find_package(Qt5 COMPONENTS Core Quick REQUIRED)
add_executable(${PROJECT_NAME} ${SOURCES} ${HAEDERS} ${RESOURCES}) 
target_compile_definitions(${PROJECT_NAME} PRIVATE $,$>:QT_QML_DEBUG>) 
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick)

【问题讨论】:

  • CMakeLists.txt 设置CMAKE_PREFIX_PATH 应该可以工作。请显示更多代码:您的设置相对于project() 调用和find_package() 调用的放置方式。
  • 嗯,这个设置应该可以了。在project() 呼叫之后,您可以尝试移动set(CMAKE_PREFIX_PATH ...)。旁注:变量CMAKE_CXX_FLAGS 的当前设置肯定不起作用,您需要在project() 调用之后移动它。此外,您的代码缺少 cmake_minimum_required() 调用。通常,CMake 会对此发出警告,因此最好修复它。
  • 哦,我发现了错误。这是克莱恩的问题。现在一切正常。非常感谢。但“CMAKE_CXX_FLAGS”在 project() 之前工作正常。
  • 我在 CMakeList.txt 中的 xtensor 库设置 CMAKE_PREFIX_PATH 有同样的问题,但外部效果很好
  • @Orion 你是如何解决这个 Clion 问题的?

标签: c++ qt cmake


【解决方案1】:

前缀路径是路径列表。使用这个:

list(APPEND CMAKE_PREFIX_PATH "/home/rip/Qt/5.12.1/gcc_64")

另外你不必直接指向配置文件路径,你也可以指向包含lib/cmake/...的目录

【讨论】:

    【解决方案2】:

    对我来说@guillaume-racicot 的建议不起作用。 CMAKE_PREFIX_PATH 已设置,但其中的所有内容都将被忽略。

    我发现您可以访问环境变量,将其拆分为一个列表并将其附加到实际附加到前缀路径而不是替换它。

    # Create a list by replacing colon with semicolon
    string(REPLACE ":" ";" CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}")
    # Append to the newly created list
    list(APPEND CMAKE_PREFIX_PATH "<YOUR_ADDITIONAL_SEARCH_PATH>")
    

    【讨论】:

    • 这很奇怪。你在什么环境下?一开始不将其视为列表几乎看起来像是一个错误。
    • @GuillaumeRacicot 我在 Ubuntu 18.04 上使用 cmake 3.10.2。据我所知,并不是它不被视为一个列表,而是CMAKE_PREFIX_PATH 是空的,而$ENV{CMAKE_PREFIX_PATH} (环境变量)不是,为了得到环境变量上的任何东西,我需要先将该字符串转换为列表。
    • 确保在一个空的 CMake 文件中重现它。仅包含 cmake_minimum_required(3.14 REQUIRED) project(test123) message("${CMAKE_PREFIX_PATH}") 的文件。如果您使用前缀路径或使用工具链文件,它可能是空的。如果您使用工具链文件,我建议不要将其重新设置。
    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多