【问题标题】:CMake cannot find wxWidgets library on macOS High SierraCMake 在 macOS High Sierra 上找不到 wxWidgets 库
【发布时间】:2018-10-19 11:00:13
【问题描述】:

我正在学习 CMake,想尝试编译一个测试 wxWidgets 应用程序,我之前在 Windows 下成功编译过该应用程序。但是,我以前从未使用过 CMake,但当时我使用 Visual Studio 手动设置它。

所以我在网上查看了一些教程,并使用 CMake 在 C++ 中编译了一个基本的 hello world 应用程序(命令行),它运行良好。然后我使用 brew 安装了 wxWidgets。

brew install wxmac

它确实安装了,我可以成功运行wx-config 工具。我还可以在查找器中查看文件。然后我将此添加到我的CMakeLists.txt 文件中。

project(wxWidgetsTest)

cmake_minimum_required(VERSION 2.8)

find_package(wxWidgets COMPONENTS core base wxSTC wxAUI REQUIRED)

include( "${wxWidgets_USE_FILE}" )

add_executable(
    ${PROJECT_NAME}
    main.cpp
    )

target_link_libraries(
    ${PROJECT_NAME}
    ${wxWidgets_LIBRARIES}
    )

但是,当我尝试生成构建文件时,我使用的是命令:

cmake -G "Unix Makefiles" ..

它没有说find_package 找不到 wxWidgets 库。这是错误输出:

CMake Error at /usr/local/Cellar/cmake/3.11.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.11.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.11.1/share/cmake/Modules/FindwxWidgets.cmake:953 (find_package_handle_standard_args)
  CMakeLists.txt:5 (find_package)

wxWidgets 库安装在 /usr/local/Cellar/wxmac/3.0.4/

我在这里做错了什么?

【问题讨论】:

  • 也许你可以使用SET(wxWidgets_ROOT_DIR /usr/local/Cellar/wxmac/3.0.4/)
  • @MarkSetchell 谢谢,但也没有用。我遇到了同样的错误。
  • 在您学习 CMake 时,我问了一个显而易见的问题:在提议的更改之后,您是否删除了 CMakeCache.txtfind_package 调用的结果被缓存,您可能看不到更改的预期结果。当你在它的时候。请切换cmake_minimum_requiredproject 调用的顺序。 cmake_minimum_required 会影响 project 调用中的一些初始设置。
  • @vre 是的,我做到了。我正在删除整个构建文件夹并重新运行 cmake 命令。顺便感谢第二个提示。做到了,但也没有任何变化。

标签: c++ macos cmake wxwidgets


【解决方案1】:

认为这是一个错误...

要解决此问题,请设置 CMAKE_FIND_ROOT_PATH 以帮助 cmake 找到程序。 在 find_package(wxWidgets) 之前添加以下行。

set(CMAKE_FIND_ROOT_PATH "/usr/local")

我在带有 cmets 的 FindWidgets.cmake 中发现了可疑代码

支持交叉编译,只在目标平台搜索。

它为 find_program 命令提供 ONLY_CMAKE_FIND_ROOT_PATH 选项。 根据文档,此选项意味着仅在“根”路径下查找程序。

【讨论】:

    【解决方案2】:

    经过六个小时的摆弄,我在 findWxWidgets 脚本中找到了一个新的配置选项,这是一个需要的配置。

    我所要做的就是指定wx-config 文件的位置。

    cmake -G "Unix Makefiles" .. -DwxWidgets_CONFIG_EXECUTABLE=/usr/local/Cellar/wxmac/3.0.4/bin/wx-config

    它能够找到 wxWidgets 库。对我来说似乎是一个简单的错误。

    这是我找到的来源:http://cmake.3232098.n2.nabble.com/Can-t-find-wxWidgets-tp7591015p7591017.html

    【讨论】:

    • 如果您查看/usr/local/bin/wx-config,您会发现它是您在上面指定的二进制文件的符号链接。因此,如果您使用此链接,它将始终指向您使用 homebrew 安装的最新版本,而您指定的版本可能已过时。只是一个想法。
    • @MarkSetchell 这并不总是正确的。我读过 macOS 带有旧版本的 wxWidgets 的二进制文件,而本地 bin 中的那些是指那些旧的二进制文件。不知道这有多真实,但我想这就是原因,因为它解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 2021-01-07
    • 1970-01-01
    • 2018-04-02
    • 2018-12-05
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多