首页 > 解决方案 > Qt Creator vcpkg 集成

问题描述

我正在尝试遵循本指南,以便在 Windows 10 上将 vcpkg 与 Qt Creator 集成:
https
://www.qt.io/blog/qt-creator-cmake-package-manager-auto-setup 目标是在 Qt Creator 项目中使用来自 vcpkg 的库。

不幸的是find_package不起作用。有了这个 CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(TESTvcpkg LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(TESTvcpkg main.cpp)


find_package(wt REQUIRED)
target_link_libraries(TESTvcpkg PRIVATE wt::wt)

我收到此错误:

8: error: Target "TESTvcpkg" links to target "wt::wt" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing?

如果我vcpkg list从命令提示符运行,我会按预期获得列表。所以环境变量应该没问题。

该指南谈到了vcpkg.json文件,但我不清楚我必须将它放在哪里;我把它放在项目文件夹中:

{“名称”:“TESTvcpkg”,“版本字符串”:“0.0.1”,“依赖项”:[“wt”]}

auto-setup.cmake在 Qt Creator 的项目树中。最后几行与 vcpkg 相关:

#
# vcpkg
#
macro(qtc_auto_setup_vcpkg)
  if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
    option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)

    find_program(vcpkg_program vcpkg)
    if (NOT vcpkg_program)
      message(WARNING "Qt Creator: vcpkg executable not found. "
                      "Package manager auto-setup will be skipped. "
                      "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.")
      return()
    endif()
    get_filename_component(vpkg_root ${vcpkg_program} DIRECTORY)

    if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
      message(STATUS "Qt Creator: vcpkg package manager auto-setup. "
                     "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.")

      file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
        set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")
        set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")
        ")
      if (CMAKE_TOOLCHAIN_FILE AND NOT
          CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
        file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake"
          "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
      endif()

      if (VCPKG_TARGET_TRIPLET)
        set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET})
      else()
        if (WIN32)
          set(vcpkg_triplet x64-mingw-static)
          if (CMAKE_CXX_COMPILER MATCHES "cl.exe")
            set(vcpkg_triplet x64-windows)
          endif()
        elseif(APPLE)
          set(vcpkg_triplet x64-osx)
        else()
          set(vcpkg_triplet x64-linux)
        endif()
      endif()

      file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
        set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet})
        include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\")
      ")
    endif()

    set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE)
  endif()
endmacro()
qtc_auto_setup_vcpkg()

有什么我必须改变的吗?

为了获得 Wt,我使用了:vcpkg install wt:x64-windowstriplet。
Qt creator 中的套件使用 Microsoft Visual C++ 编译器 (AMD64)

编辑: 更改这些参数,示例https://www.qt.io/blog/qt-creator-cmake-package-manager-auto-setup似乎有效: Qt Creator Screenshot

标签: c++windowscmakeqt-creatorvcpkg

解决方案


该项目在其 CMakeLists.txt 之一中定义了目标wt(请参见此处)。稍后在此文件中,它将命名空间前缀定义Wt::. 所以要链接的目标是Wt::wt. target_link_libraries在命令中引用目标时,大小写很重要。


推荐阅读