首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cmake和vcpkg在macos上构建Qt5共享库

使用cmake和vcpkg在macos上构建Qt5共享库
EN

Stack Overflow用户
提问于 2022-03-23 13:48:40
回答 1查看 264关注 0票数 1

Qt蒙特雷(12.2.1版)上使用cmakevcpkg构建共享库(Version12.2.1)失败。但是,使用默认的VCPKG_LIBRARY_LINKAGE (即静态的),构建库并使其能够成功地使用。只有当我尝试将其构建为共享库时,才会出现此问题。

我正在使用的完整工具集:

  • macOS Monterey 12.2.1 (21D62).

.

  • Xcode 13.3(构建版本13E113).

  • cmake版本3.22.3.

  • vcpkg标签- 2022.03.10(af2287382b1991dbdcb7e5112d236f3323b9dd7a).

  • Qt版本由此vcpkg标记- 5.15.3.

隐式设置。

在我的PreLoad.cmake文件中-包括以下代码:

代码语言:javascript
复制
...
set(VCPKG_TARGET_TRIPLET "x64-osx")
set(VCPKG_HOST_TRIPLET "x64-osx")
set(CMAKE_OSX_ARCHITECTURES x86_64)
...

在运行cmake -DCMAKE_BUILD_TYPE=Debug ..时,Qt库(最终)成功构建。但是,当我试图将其构建为一个共享库,以便稍后通过将此代码片段添加到我的PreLoad.cmake:来动态链接到我的代码时

代码语言:javascript
复制
if((${PORT} MATCHES "qt5-base") OR (${PORT} MATCHES "qt5-tools"))
    set(VCPKG_LIBRARY_LINKAGE dynamic)
else()
    set(VCPKG_LIBRARY_LINKAGE static)
endif()

此错误导致vcpkg安装过程失败:

代码语言:javascript
复制
-- Running vcpkg install - failed
CMake Error at vcpkg/scripts/buildsystems/vcpkg.cmake:834 (message):
  vcpkg install failed.  See logs for more information:
  /Users/avibiton/Dev/main/build/vcpkg-manifest-install.log
Call Stack (most recent call first):
  /opt/homebrew/Cellar/cmake/3.22.3/share/cmake/Modules/CMakeDetermineSystem.cmake:124 (include)
  CMakeLists.txt:30 (project)

-- Configuring incomplete, errors occurred!

检查vcpkg-manifest-install.log文件并将其转换为vcpkg/buildtrees/qt5-base/config-x64-osx-dbg-err.log文件时,我遇到了以下错误消息:

代码语言:javascript
复制
ERROR: debug-only framework builds are not supported. Configure with -no-framework if you want a pure debug build.

因此,我转到这个文件vcpkg/ports/qt5-base/portfile.cmake,并尝试将-no-framework标志附加到CORE_OPTIONS变量中,如下所示:

代码语言:javascript
复制
...
## 3rd Party Libs
list(APPEND CORE_OPTIONS
    -system-zlib
    -system-libjpeg
    -system-libpng
    -system-freetype
    -system-pcre
    -system-doubleconversion
    -system-sqlite
    -system-harfbuzz
    -icu
    -no-vulkan
    -no-angle # Qt does not need to build angle. VCPKG will build angle!
    -no-glib
    -no-framework # This is my change
    )
...

但这个变化却成了它自身的一个兔子洞。

如果有人成功地使用cmake和vcpkg在macos上构建了Qt作为共享库,我将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-13 15:47:31

如果不需要调试配置中内置的Qt和其他vcpkg依赖项,也可以在PreLoad.cmake中设置VCPKG_BUILD_TYPE

代码语言:javascript
复制
...    
set(VCPKG_BUILD_TYPE release)
...

如果您的其他端口需要在调试配置中构建,您可能还可以按照每个端口设置它,就像使用VCPKG_LIBRARY_LINKAGE时那样。

代码语言:javascript
复制
...
set(VCPKG_LIBRARY_LINKAGE static)
if(PORT MATCHES "qt5-")
    set(VCPKG_LIBRARY_LINKAGE dynamic)
    set(VCPKG_BUILD_TYPE release)
endif()
...

由于此设置很可能会破坏Windows,因此您应该使用只用于macOS构建的自定义三元组,而不是可能用于所有平台(包括Windows )的PreLoad.cmake。您可以在vcpkg docs https://vcpkg.io/en/docs/examples/overlay-triplets-linux-dynamic.html中找到如何这样做的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71588349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档