【问题标题】:Installing Qt5Svg with Conan用柯南安装 Qt5Svg
【发布时间】:2020-10-13 16:08:33
【问题描述】:

所以我正在尝试将我一直在从事的这个项目从 qmake 移植到 cmake。我还计划通过 Conan 获取我的 qt 依赖项并启动 CI 服务。 使用 qt/5.12.4@bincrafters/stable 可以轻松获取大部分 qt 库。除了一个。出于某种原因,这个包中不包含 Qt5Svg 模块,我找不到一个好的解决方案,所以我走到了死胡同。下面是错误信息和相关的 cmake 文件。

错误信息

[CMake] src/analysis_tool/CMakeLists.txt:33 (find_package) 处的 CMake 错误:
[CMake] 通过在 CMAKE_MODULE_PATH 中不提供“FindQt5Svg.cmake”,此项目具有
[CMake] 要求CMake查找“Qt5Svg”提供的包配置文件,但是
[CMake] CMake 没有找到。
[CMake]
[CMake] 找不到任何由“Qt5Svg”提供的包配置文件
[CMake] 以下名称:
[CMake]
[CMake] Qt5SvgConfig.cmake
[CMake] qt5svg-config.cmake
[CMake]
[CMake] 将“Qt5Svg”的安装前缀添加到CMAKE_PREFIX_PATH或设置
[CMake]“Qt5Svg_DIR”到包含上述文件之一的目录。如果“Qt5Svg”
【CMake】提供单独的开发包或SDK,请确保已
[CMake] 已安装。

Conan.cmake(从顶层 CMakeLists.txt 文件中调用)

macro(run_conan)
  # Download automatically, you can also just copy the conan.cmake file
  if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    message(${CMAKE_BINARY_DIR};)
    file(DOWNLOAD "https://github.com/conan-io/cmake-conan/raw/v0.15/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake")

  endif()

  include(${CMAKE_BINARY_DIR}/conan.cmake)

  conan_add_remote(
    NAME
    bincrafters
    URL
    https://api.bintray.com/conan/bincrafters/public-conan)
    
  conan_cmake_run(
    REQUIRES
    qt/5.12.4@bincrafters/stable
    OPTIONS
    ${CONAN_EXTRA_OPTIONS}
    BASIC_SETUP
    CMAKE_TARGETS # individual targets to link to
    BUILD
    missing)
endmacro()

可执行的 CMake

cmake_minimum_required(VERSION 3.8)
project(codego)

file(GLOB CODEGO_SOURCES "src/*.cpp")
file(GLOB CODEGO_HEADERS "include/*.h")
file(GLOB CODEGO_UIS "ui/*.ui")
file(GLOB CODEGO_RES "res/*.qrc")

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOUIC_SEARCH_PATHS ui)

add_executable(${PROJECT_NAME} src/main.cpp ${CODEGO_UIS})

target_include_directories(${PROJECT_NAME} PUBLIC include)
target_include_directories(${PROJECT_NAME} PUBLIC ui)
target_include_directories(${PROJECT_NAME} PUBLIC res)

find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Svg REQUIRED)

# Add the include directories for the Qt 5 modules to the compile lines.
include_directories(${Qt5Core_INCLUDE_DIRS}/QtCore)
include_directories(${Qt5Gui_INCLUDE_DIRS}/QtGui)
include_directories(${Qt5Widgets_INCLUDE_DIRS}/QtWidgets)
include_directories(${Qt5Xml_INCLUDE_DIRS}/QtXml)
include_directories(${Qt5Xml_INCLUDE_DIRS}/QtSvg)

# Use the compile definitions defined in the Qt 5 modules
add_definitions(${Qt5Core_DEFINITIONS})
add_definitions(${Qt5Gui_DEFINITIONS})
add_definitions(${Qt5Widgets_DEFINITIONS})
add_definitions(${Qt5Xml_DEFINITIONS})
add_definitions(${Qt5Svg_DEFINITIONS})

qt5_wrap_ui(WRAP_UI_MOC ${CODEGO_UIS})
qt5_wrap_cpp(WRAP_HEADER_MOC ${CODEGO_HEADERS})

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_BINARY_DIR})
include_directories(${CMAKE_BINARY_DIR})

include_directories(include)

add_library(PROJECT_LIBRARIES SHARED
    ${CODEGO_SOURCES}
    ${WRAP_UI_MOC}
    ${WRAP_HEADER_MOC})

target_link_libraries(${PROJECT_NAME} 
                        Qt5::Core 
                        Qt5::Gui
                        Qt5::Widgets
                        Qt5::Xml
                        Qt5::Svg)

target_link_libraries(${PROJECT_NAME} PROJECT_LIBRARIES)

所有其他模块似乎都安装得很好(Qt5Core Qt5Widgets 等),我可以在 .conan 文件夹中找到它们,但在 Qt5Svg 中找不到。感谢您花时间阅读本文。

【问题讨论】:

  • 你能检查一下你是否有一个文件夹~/.conan/data/qt/5.12.4/bincrafters/stable/package/<package_hash>/lib/cmake/Qt5Svg
  • 感谢您的回复。是的,我做了检查,没有任何与 Svg 模块相关的内容。
  • 你的${CONAN_EXTRA_OPTIONS} 是什么?你启用qt:qtsvg了吗?
  • 说实话我没有。我第一次听说必须这样做。但是,即使启用了该功能(添加到 conan_extra_options),我仍然没有 conan 中的 Qt5Svg 文件夹,也无法找到_package。 set(CONAN_EXTRA_OPTIONS BASIC_SETUP CMAKE_TARGETS qt:qtsvg=true)

标签: c++ qt cmake continuous-integration conan


【解决方案1】:

您需要提供使用 qt 包构建 qtsvg 的选项。您的conan_cmake_run 应如下所示:

cmake_minimum_required(VERSION 3.8)
project(codego)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOUIC_SEARCH_PATHS ui)

if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    message(${CMAKE_BINARY_DIR};)
    file(DOWNLOAD "https://github.com/conan-io/cmake-conan/raw/v0.15/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake")

  endif()

  include(${CMAKE_BINARY_DIR}/conan.cmake)

  conan_add_remote(
    NAME
    bincrafters
    URL
    https://api.bintray.com/conan/bincrafters/public-conan)

conan_cmake_run(
       REQUIRES qt/5.14.1@bincrafters/stable
       OPTIONS qt:qtsvg=True
       BASIC_SETUP
       CMAKE_TARGETS
       BUILD missing
)

编辑:我使用了 qt 5.14.1,因为 5.12.4 由于某些过时的软件包而无法在我的 osx 机器上构建。现在当我做ls:

ls ~/.conan/data/qt/5.14.1/bincrafters/stable/package/<package_id>/lib/cmake/

在文件夹中给我Qt5Svg

【讨论】:

  • 这听起来很合理。我 100% 复制了命令,这就是我得到的 ` > [CMake] 错误:qt/5.9.0@pivot/stable: option 'qtsvg' doesn't exist > [CMake] 可能的选项是 [] > [CMake] cmake/conan.cmake:402 处的 CMake 错误(消息):> [CMake] Conan install failed='1' > [CMake] 调用堆栈(最近调用优先):> [CMake] cmake/conan.cmake:497( conan_cmake_install) > [CMake] CMakeLists.txt:25 (conan_cmake_run) > [CMake] -- 配置不完整,出现错误!`
  • 事实上,如果我使用大写 q (Qt:qtsvg=True) 似乎安装 qt 包没有错误,但我仍然没有在 conan 文件夹中获得 svg 模块。
  • 对这个答案添加了一个编辑,@Butterscotch1993 你能试试那个代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 2023-01-15
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多