Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake在Windows上找不到wxWidgets_Cmake_Wxwidgets - Fatal编程技术网

Cmake在Windows上找不到wxWidgets

Cmake在Windows上找不到wxWidgets,cmake,wxwidgets,Cmake,Wxwidgets,我已经搜索了这个主题并找到了和,但它似乎要么与构建wxWidgets有关,要么不包含我问题的答案 我已经成功地在Windows上构建了静态libs für wxWidgets,但现在我正在努力使用Cmake将库正确地包含到我的项目中。这是我的CMakeLists.txt: set(PROJECT_NAME wxapp) project(${PROJECT_NAME}) cmake_minimum_required(VERSION 2.8) set(SRC_LIST main.cpp app.c

我已经搜索了这个主题并找到了和,但它似乎要么与构建wxWidgets有关,要么不包含我问题的答案

我已经成功地在Windows上构建了静态libs für wxWidgets,但现在我正在努力使用Cmake将库正确地包含到我的项目中。这是我的
CMakeLists.txt

set(PROJECT_NAME wxapp)
project(${PROJECT_NAME})
cmake_minimum_required(VERSION 2.8)

set(SRC_LIST main.cpp app.cpp app.h frame.cpp frame.h)
add_executable(${PROJECT_NAME} WIN32 ${SRC_LIST})

find_package(wxWidgets REQUIRED net gl core base)
include(${wxWidgets_USE_FILE})
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})

set(wxWidgets_USE_LIBS ON)
set(wxWidgets_CONFIGURATION msw)
我已正确设置了
WXWIN
path变量。但是,CMake在该配置中抛出一个错误:

Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
wxWidgets_INCLUDE_DIRS net gl core base)
我尝试过多种建议,比如使用下载预构建动态库并根据建议手动添加它们,例如

但这一切都没有用。

解决方法(至少对我有效):

我更改了建议语句中的
find_package
命令:

find_包(wxWidgets组件gl核心基础可选_组件网)

find_包(需要wxWidgets 3.1)

中的一个用户将此包含在他/她的CMake文件中,出于依赖性,我尝试了此方法,它确实起了作用。似乎CMake在某些未知情况下的配置无法按照说明中提供的语句正常运行。如果我将命令更改为新语句,我的静态构建以及自编译和预编译DLL将被CMake完美识别

我还清除了CMake缓存,灵感来自。根据这篇文章,在某些情况下,Windows和CMake缓存似乎存在问题,但我不知道原因。我可以复制用户在那里观察到的行为:

在Windows下,您必须指向安装目录,例如

设置(wxWidgets\u ROOT\u DIR“C:/wxWidgets-3.1.3”)设置(wxWidgets\u LIB\u DIR “C:/wxWidgets-3.1.3/lib/vc14x_x64_dll”)

但是这种行为仍然很奇怪。当我使用CMake GUI(3.16, 最新的),行为是这样的

  • 删除缓存(只是为了保持一致)
  • 按“配置”按钮 -->失败:C:/Program Files/CMake/share/CMake-3.16/Modules/FindPackageHandleStandardArgs处的CMake错误。CMake:146 (消息):找不到wxWidgets(缺少:wxWidgets_库) wxWidgets_INCLUDE_DIRS core base qa adv net html gl propgrid richtext)
  • 再次按下“配置”按钮 -->成功
  • 在清除缓存和重新加载项目时,我还观察到了IDEs CLion和代码块中CMake的一些不一致行为

    所以,我不知道缓存清除到底是如何解决我的问题的。但是,如果我只是清除缓存、重新加载项目并将CMake指令留在
    find_package(wxWidgets COMPONENTS gl core base可选_COMPONENTS net)
    ,CMake将无法找到我的安装,尽管
    WXWIN
    路径设置正确


    如果您对此了解得更多,我很高兴被纠正。

    “我已经成功地在Windows上为wxWidgets构建了静态库”-但是
    vc14x\u x64\u dll
    目录的名称表明您有
    .dll
    库,即动态库。在任何地方,您分配给
    wxWidgets\u ROOT\u DIR
    变量的确切值是什么,以及该目录下的文件布局是什么?在调用
    find\u package
    之前,您需要设置这些变量。另外,请参见此处的搜索路径:欢迎使用堆栈溢出!你试过用谷歌搜索错误信息吗?在这样做的时候,我发现并提出了一些问题,似乎有一些有用的建议。您尝试过这些吗?@StephenNewell:find_package的文档仅描述了
    CONFIG
    文件的搜索过程。但是消息
    找不到wxWidgets(缺少:…)
    意味着使用了
    模块
    模式,CMake找到了相应的“查找”脚本。此脚本实现的搜索过程在脚本本身(以及相应的)中进行了描述,并且未通过
    find_package
    @Tsyvarev进行标准化:是的,我将此文件放在D:\libs\wxWidgets\include\wx\wx.h下,WXWIN设置为D:\libs\wxWidgets。这条路应该行得通,对吗?
    set(wxWidgets_ROOT_DIR $ENV{WXWIN})
    set(wxWidgets_LIBRARIES $ENV{WXWIN}/include)
    set(wxWidgets_INCLUDE_DIR $ENV{WXWIN}/lib/vc14x_x64_dll)
    include_directories(includes $ENV{WXWIN} $ENV{WXWIN}/include $ENV{WXWIN}/lib/vc14x_x64_dll)
    link_directories($ENV{WXWIN} $ENV{WXWIN}/include $ENV{WXWIN}/lib/vc14x_x64_dll) # this seems to be a discouraged/deprecated method