CMake FindwxWidgets仅在首次调用“ configure”时失败。命令 [英] CMake FindwxWidgets fails only on first invocation of "configure" command

查看:452
本文介绍了CMake FindwxWidgets仅在首次调用“ configure”时失败。命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码尝试使用CMake 3.7.1查找wxWidgets 3.1预先构建的库。

  set(wxWidgets_ROOT_DIR M:/ wxWidgets)
set(wxWidgets_LIB_DIR M:/ wxWidgets / lib / gcc510TDM_x64_dll)
set(wxWidgets_CONFIGURATION mswud)
find_package(wxWidgets 3.1必需组件核心基础stc)
include($ {wxWidgets_USE_FILE})
target_link_libraries(MyTarget $ {wxWidgets_LIBRARIES})

生成器是 CodeBlocks-MinGW Makefiles。它是在Windows 7上。因此,FindwxWidgets模块的搜索样式为 win32。



奇怪的是,当尚未设置CMake缓存时,此代码总是在配置命令/按钮的第一次调用时失败。并且它将在随后的配置调用中成功。错误消息是

  CMake M:/cmake-3.7.1-win64-x64/share/cmake-3.7 /Modules/FindPackageHandleStandardArgs.cmake:138(消息):
找不到wxWidgets(丢失:wxWidgets_LIBRARIES
wxWidgets_INCLUDE_DIRS)(要求至少为版本 3.1)
调用堆栈(最近调用首先):
M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake:378(_FPHSA_FAILURE_MESSAGE)
M:/cmake-3.7.1-win64 -x64 / share / cmake-3.7 / Modules / FindwxWidgets.cmake:929(find_package_handle_standard_args)
CMakeLists.txt:16(find_package)

我是CMake的新手。这正常吗? FindwxWidgets模块是否应该以这种方式工作?



以下是第一个(失败)配置之后CMake缓存的内容:

  //已清除。 
wxWidgets_LIB_DIR:PATH = wxWidgets_LIB_DIR-NOTFOUND
...
...
// wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL = wxWidgets_LIB_DIR-NOTFOUND $ b $ RO // wxWidgets
WX_ROOT_DIR:INTERNAL = M:/ wxWidgets

以下是后续的CMake缓存的内容(成功)配置:

  //到文件的路径。 
_filename:FILEPATH = M:/wxWidgets/include/wx/version.h

//设置wxWidgets配置(mswud; mswu)
wxWidgets_CONFIGURATION:STRING = mswud

//已清除。
wxWidgets_LIB_DIR:PATH = wxWidgets_LIB_DIR-NOTFOUND

// wxWidgets资源文件编译器二进制文件的位置(wxrc)
wxWidgets_wxrc_EXECUTABLE:FILEPATH = wxWidgets_wxrc_EXECUTABLE-NOTFOUND
... b $ b ...
//有关查找wxWidgets的详细信息
FIND_PACKAGE_MESSAGE_DETAILS_wxWidgets:INTERNAL = [M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_core.a; M:/wwWidgets/lib/gcc510aDMB.x ; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_stc.a; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxpngd.a; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxtdds/lib/gwxtiffd.a; T: .a; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxzlibd.a; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxregexud.a; M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxexpatd.a; winmm; com32] [M:/ wxWidgets / lib / gcc510TDM_x64_dll / mswud; M:/ wxWidgets / include] [v3.1.0(3.1)]
// wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL = M:/ wxWidgets / lib / gcc510TDM_x64_dll
// wxWidgets_ROOT_DIR
WX_ROOT_DIR:IN TERNAL = M:/ wxWidgets

我省略了用于单个wxWidgets组件的键,例如 WX_zlib: FILEPATH或 WX_zlib-ADVANCED:INTERNAL等。

解决方案

在使用Visual生成器时,我遇到了同样的问题Studio 2015x64,直到我添加了行设置WX_ROOT_DIR:

  SET(WX_ROOT_DIR $ {wxwidgets_path})
SET(wxWidgets_CONFIGURATION mwsu)
SET(wxWidgets_ROOT_DIR $ {wxwidgets_path})
SET(wxWidgets_LIB_DIR $ {wxwidgets_path} / vc_x64_lib)
FIND_PACKAGE(wxWidgets必填项)
<$ c / pre>

I have the following code to try find wxWidgets 3.1 pre-built libraries using CMake 3.7.1.

set(wxWidgets_ROOT_DIR M:/wxWidgets)
set(wxWidgets_LIB_DIR M:/wxWidgets/lib/gcc510TDM_x64_dll)
set(wxWidgets_CONFIGURATION mswud)
find_package(wxWidgets 3.1 REQUIRED COMPONENTS core base stc)
include(${wxWidgets_USE_FILE})
target_link_libraries(MyTarget ${wxWidgets_LIBRARIES})

The generator is "CodeBlocks - MinGW Makefiles". And it is on Windows 7. So the FindwxWidgets module's search style is "win32".

The strange thing is that this code always fails on the first invocation of "configure" command/button, when the CMake cache is not yet set. And it will succeed on subsequent invocation of "configure". And the error message is

CMake Error at M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
  Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
  wxWidgets_INCLUDE_DIRS) (Required is at least version "3.1")
Call Stack (most recent call first):
  M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindwxWidgets.cmake:929 (find_package_handle_standard_args)
  CMakeLists.txt:16 (find_package)

I'm new to CMake. Is this normal? Is FindwxWidgets module supposed to work this way?

Below are the contents of CMake cache after the first (failed) "configure":

//Cleared.
wxWidgets_LIB_DIR:PATH=wxWidgets_LIB_DIR-NOTFOUND
...
...
//wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL=wxWidgets_LIB_DIR-NOTFOUND
//wxWidgets_ROOT_DIR
WX_ROOT_DIR:INTERNAL=M:/wxWidgets

Below are the contents of CMake cache after subsequent (successful) "configure":

//Path to a file.
_filename:FILEPATH=M:/wxWidgets/include/wx/version.h

//Set wxWidgets configuration (mswud;mswu)
wxWidgets_CONFIGURATION:STRING=mswud

//Cleared.
wxWidgets_LIB_DIR:PATH=wxWidgets_LIB_DIR-NOTFOUND

//Location of wxWidgets resource file compiler binary (wxrc)
wxWidgets_wxrc_EXECUTABLE:FILEPATH=wxWidgets_wxrc_EXECUTABLE-NOTFOUND
...
...
//Details about finding wxWidgets
FIND_PACKAGE_MESSAGE_DETAILS_wxWidgets:INTERNAL=[M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_core.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxbase31ud.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_stc.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxpngd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxtiffd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxjpegd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxzlibd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxregexud.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxexpatd.a;winmm;comctl32;rpcrt4;wsock32][M:/wxWidgets/lib/gcc510TDM_x64_dll/mswud;M:/wxWidgets/include][v3.1.0(3.1)]
//wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL=M:/wxWidgets/lib/gcc510TDM_x64_dll
//wxWidgets_ROOT_DIR
WX_ROOT_DIR:INTERNAL=M:/wxWidgets

I omitted keys that are for individual wxWidgets components, such as "WX_zlib:FILEPATH", or "WX_zlib-ADVANCED:INTERNAL", etc.

解决方案

I had the same issue, using the generator for Visual Studio 2015x64, until I added the line setting WX_ROOT_DIR:

SET(WX_ROOT_DIR ${wxwidgets_path})
SET(wxWidgets_CONFIGURATION mwsu)
SET(wxWidgets_ROOT_DIR ${wxwidgets_path})
SET(wxWidgets_LIB_DIR ${wxwidgets_path}/vc_x64_lib)
FIND_PACKAGE(wxWidgets REQUIRED QUIET)

这篇关于CMake FindwxWidgets仅在首次调用“ configure”时失败。命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆