CMake在Windows上找不到wxWidgets。

4
我在CMakeLists.txt中有以下片段,正如wxWidgets wiki所述。
set(wxWidgets_ROOT_DIR libs/wxWidgets)
set(wxWidgets_CONFIGURATION mswu)
find_package(wxWidgets REQUIRED
        COMPONENTS core base adv)
include(${wxWidgets_USE_FILE})

libs/wxWidgets是一个git子模块。在Ubuntu 16.04上,该项目可以构建和运行。子模块的描述如下:

[submodule "libs/wxWidgets"]
    path = libs/wxWidgets
    url = https://github.com/wxWidgets/wxWidgets
    branch = WX_3_0_3_BRANCH

然而,将同样的代码放在Windows上并不起作用,会出现类似以下的错误:
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
      Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
  wxWidgets_INCLUDE_DIRS)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files (x86)/CMake/share/cmake-3.9/Modules/FindwxWidgets.cmake:953 (find_package_handle_standard_args)
  CMakeLists.txt:8 (find_package)

已尝试从官方网站下载其他wxWidgets安装程序,包括zipWindows Installer,但仍出现相同的错误。

这个问题可能与此相关,但没有可接受的答案。


你在Windows上构建了库吗?你使用哪个编译器? - Igor
我并没有手动构建它,只是将wxWidgets作为子模块添加进来。在Ubuntu上,CMake可以自动处理构建过程,就像维基中所描述的那样。我希望它也能在Windows上运行。编译器是VS 2017。 - Steven Feng
1
wxWidgets不是(也希望永远不会成为)CMake准备好的。在Linux上,它由gcc Automake和friends构建系统覆盖。Windows则不同。只需构建库即可。打开c:\ wxWidgets \ build \ msw \ wx <n> .sln,然后选择“Build-> Batch Build ...”,并构建所有内容。然后再次尝试构建您的软件。 - Igor
2
@Igor “并希望永远不会准备好CMake” 为什么你说希望永远不会准备好? - legalize
@legalize 他似乎在使用CMake时遇到了困难。 - Nahiyan
1个回答

1
尝试使用以下代码:
set(wxWidgets_DIR "path/to/wxWidgets/lib/cmake/wxWidgets")

find_package(wxWidgets REQUIRED core base CONFIG) #Don't forget to add this 'CONFIG'
include(UsewxWidgets)

这在wxWidgets 3.2.1中对我有效。

CONFIG文本用于什么?你能解释一下吗?谢谢。 - ollydbg23
我其实不知道它是做什么的,xD。我从 wxWidgets GitHub 存储库的问题 中找到了解决方案。问题的创建者说 ...在该目录中打开 CMakeLists.txt 并在 **find_package(wxWidgets 3.3 COMPONENTS core base REQUIRED CONFIG)** 之前添加这些行,以便 Findwxwidgets 在...,然后我尝试添加了 CONFIG。然后它就可以正常工作了,没有任何错误。xD @ollydbg23 - Usitha Indeewara
嗨,@Usitha Indeewara,感谢您的回复。通过一些谷歌搜索,我发现关键字“CONFIG”意味着配置文件由软件包提供,请参见此链接:cmake-packages(7) — CMake 3.25.1 Documentation,但我不确定为什么wxWidgets是否提供配置文件,因为许多编译器都可以构建wxWidgets。 - ollydbg23
1
在wxWidgets的CMake文档网页wxWidgets: CMake Overview中,它说:“警告:请注意,CMake findwxWidgets模块不幸地无法在早于3.24版本的CMake中检测到wxWidgets 3.2.0。您可以从CMake源中复制最新版本的FindwxWidgets.cmake到您的系统中来解决这个问题,或者如果您使用CMake构建wxWidgets本身,则使用find_package()的CONFIG模式,即使在较旧的CMake版本中也可以正常工作。”,因此看起来当您使用CMake进行构建时,应该添加CONFIG选项。 - ollydbg23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接