wxWidgets由于缺少wxml .lib而无法构建



显然,任何与gui相关的组件都涉及XML。因此,我不能从源代码开始配置和构建wxWidgets。我是wxWidgets的新手。

我目前的设置是在Win10上使用MSVC v141 (Visual Studio 2017)和最新的CMake版本(目前为3.21)。

在wxWidgets项目的config.cmake中(使用最新的master分支),我看到
wx_get_dependencies(EXTRALIBS_XML xml)

我也用-DwxUSE_XML=ON(在其他参数中)调用CMake,但这仍然导致:

  • XML依赖项无处可寻
  • 分别是不构建

链接失败,出现以下错误:

LINK : fatal error LNK1104: cannot open file 'wxxml.lib' [C:Users...CMakeBuildsef5b5ada-ee42-7735-988a-ae37c735ccffbuilddepsbuildwxwidgetslibsqawxqa.vcxproj]

wxWidgets实际使用的是什么库,我如何触发它的检索和相应的配置和构建?由于我将wxWidgets添加到我的CMake项目中作为ExternalProject组件,因此我会感激这种想法。然而,任何关于这个问题的信息都是非常受欢迎的,特别是因为它将照亮如何配置其他功能(如果我将来需要它们),如WebView。

wxxml.lib问题现已修复。在修复它的同时,我还发现了wxWidgets构建系统中的一个bug。

构建这个库失败的原因其实很简单,但是由于缺乏对wxWidgets依赖关系的了解。考虑到wxWidgets非常依赖XML,我认为它应该有自己的XML解析器。嗯,不完全是。wxXML组件实际上使用了一个名为EXPAT的底层第三方依赖项,正如你在我的问题中看到的,我已经停用了,因为它在构建期间给了我问题(由于仍然存在无法自动检索依赖项的问题)。

我所做的是克隆libexpat存储库,将其添加为ExternalProject,为库和包含目录设置变量,并将它们传递到我的wxWidgets项目。但是有一个问题……

expat.cmake文件如下所示:

#############################################################################
# Name:        build/cmake/lib/expat.cmake
# Purpose:     Use external or internal expat lib
# Author:      Tobias Taschner
# Created:     2016-09-21
# Copyright:   (c) 2016 wxWidgets development team
# Licence:     wxWindows licence
#############################################################################
if(wxUSE_EXPAT STREQUAL "builtin")
# TODO: implement building expat via its CMake file, using
# add_subdirectory or ExternalProject_Add
wx_add_builtin_library(wxexpat
src/expat/expat/lib/xmlparse.c
src/expat/expat/lib/xmlrole.c
src/expat/expat/lib/xmltok.c
)
set(EXPAT_LIBRARIES wxexpat)
set(EXPAT_INCLUDE_DIRS ${wxSOURCE_DIR}/src/expat/expat/lib)
elseif(wxUSE_EXPAT)
find_package(EXPAT REQUIRED)
endif()

我将使用<ROOT_OF_WXWIDGETS_PROJECT>/build/cmake/lib中存储的第三方依赖的*.cmake文件来确定如果选择builtin作为相应库的值,我需要设置哪些变量。因为我想使用我自己的我需要sys(例如-DwxUSE_EXPAT=sys作为CMAKE_ARGS在我的wxWidgetsExternalProject),也传递相应的头和库。

对于上面的文件,我们可以假设EXPAT_LIBRARIES是必需的。然而,在构建失败(又一次)并看到原因是激活的expat构建并且它被设置为builtin之后,我详细检查了日志,发现了以下错误:

无法找到EXPAT (missing: EXPAT_LIBRARY) (found version "2.2.6")

注意EXPAT_LIBRARY。通过它(-DEXPAT_LIBRARY=...)后,我的构建完成了。对我来说,这是一个bug,或者只是依赖cmake文件和wxWidgets项目的其余部分之间的不一致。

重要的是要注意,我没有通过wxWidgets本身检索外部依赖项(参见config.cmake,更准确地说是宏wx_get_dependencies(...))。这解决了wxWidgets的基本配置和构建问题,但如果您不想自己处理wxWidgets的每个依赖项(为什么要这样做?),我建议寻找一种解决方案,其中依赖项(至少是您不想处理的依赖项)被自动检索,配置和构建为builtin

最新更新