【问题标题】:Qt Creator vcpkg integrationQt Creator vcpkg 集成
【发布时间】:2021-12-23 06:26:42
【问题描述】:

我正在尝试遵循本指南,以便在 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”, “依赖”:[ “重量” ] }

我在 Qt Creator 的项目树中有auto-setup.cmake。最后几行与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++ windows cmake qt-creator vcpkg


    【解决方案1】:

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

    【讨论】:

    • 感谢指正。不幸的是,我的代码/配置中还有其他问题。似乎我找到了一种解决方法,可以更改项目中的一些参数->build->CMake(我将其发布为我的主线程的 EDIT)