在Qt蒙特雷(12.2.1版)上使用cmake和vcpkg构建共享库(Version12.2.1)失败。但是,使用默认的VCPKG_LIBRARY_LINKAGE (即静态的),构建库并使其能够成功地使用。只有当我尝试将其构建为共享库时,才会出现此问题。
我正在使用的完整工具集:
.
Xcode 13.3(构建版本13E113).cmake版本3.22.3.vcpkg标签- 2022.03.10(af2287382b1991dbdcb7e5112d236f3323b9dd7a).Qt版本由此vcpkg标记- 5.15.3.隐式设置。
在我的PreLoad.cmake文件中-包括以下代码:
...
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:来动态链接到我的代码时
if((${PORT} MATCHES "qt5-base") OR (${PORT} MATCHES "qt5-tools"))
set(VCPKG_LIBRARY_LINKAGE dynamic)
else()
set(VCPKG_LIBRARY_LINKAGE static)
endif()此错误导致vcpkg安装过程失败:
-- 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文件时,我遇到了以下错误消息:
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变量中,如下所示:
...
## 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作为共享库,我将非常感谢您的帮助!
发布于 2022-04-13 15:47:31
如果不需要调试配置中内置的Qt和其他vcpkg依赖项,也可以在PreLoad.cmake中设置VCPKG_BUILD_TYPE
...
set(VCPKG_BUILD_TYPE release)
...如果您的其他端口需要在调试配置中构建,您可能还可以按照每个端口设置它,就像使用VCPKG_LIBRARY_LINKAGE时那样。
...
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中找到如何这样做的示例。
https://stackoverflow.com/questions/71588349
复制相似问题