显然,任何与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
。