CMake WxWidgets 项目在 linux 上成功构建,但未在 windows 上构建

CMake WxWidgets project successfully built on linux but not on windows

我在Ubuntu19.10基于CMake构建了一个WxWidgets,但是在Windows10失败了,说找不到WxWidgets,虽然我构建成功了(static , 发布并支持 unicode)。

WxWidgets 路径为 C:\wxWidgets-3.1.3 构建目录为 C:\wxWidgets-3.1.3\msw-release.

生成文件是

cmake_minimum_required(VERSION 3.0)

project(ChessPgnReviser VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

ADD_DEFINITIONS(-Wall -Wno-sign-compare -O2)

set(SRCS
    src/main.cpp
)

set (HEADERS
)

message( "--Root--" ${wxWidgets_ROOT_DIR} )
message( "--Lib dir--" ${wxWidgets_LIB_DIR} )

add_executable(ChessPgnReviser ${SRCS} ${HEADERS})

find_package(wxWidgets COMPONENTS net gl core base)
if(wxWidgets_FOUND)
  include(${wxWidgets_USE_FILE})
  target_link_libraries(ChessPgnReviser ${wxWidgets_LIBRARIES})
else()
    message(FATAL_ERROR "Failed to find WxWidgets library")
endif()

我正在使用 Msys 64 位编译项目。在其子文件夹 etc/profile 的底部,我添加了

PATH=$PATH:/c/dev/cmake/bin
wxWidgets_ROOT_DIR=/c/wxWidgets-3.1.3
wxWidgets_LIBRARIES=$wxWidgets_ROOT_DIR/msw-release/lib
wxWidgets_LIB_DIR=$wxWidgets_ROOT_DIR/msw-release/lib
wxWidgets_INCLUDE_DIRS=$wxWidgets_ROOT_DIR/include

所以我试过了

$ mkdir build && cd build
$ cmake .. -G "MinGW Makefiles"
-- The C compiler identification is GNU 10.1.0
-- The CXX compiler identification is GNU 10.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
--Root--
--Lib dir--
-- Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS net gl core base)
CMake Error at CMakeLists.txt:27 (message):
  Failed to find WxWidgets library


-- Configuring incomplete, errors occurred!
See also "C:/Users/laure/Documents/Programmation/ProjetsPersos/Cpp/ChessPgnReviserWxWidgets/build/CMakeFiles/CMakeOutput.log".

此外,感谢@squareskittles,我也尝试了:

$ cmake .. -G "MinGW Makefiles" -DwxWidgets_ROOT_DIR="C:\wxWidgets-3.1.3" -DwxWidgets_LIB_DIR="C:\wxWidgets-3.1.3\msw-release\lib"
-- The C compiler identification is GNU 10.1.0
-- The CXX compiler identification is GNU 10.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
--Root--C:\wxWidgets-3.1.3
--Lib dir--C:\wxWidgets-3.1.3\msw-release\lib
-- Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS net gl core base)
CMake Error at CMakeLists.txt:27 (message):
  Failed to find WxWidgets library


-- Configuring incomplete, errors occurred!
See also "C:/Users/laure/Documents/Programmation/ProjetsPersos/Cpp/ChessPgnReviserWxWidgets/build/CMakeFiles/CMakeOutput.log".

您可以找到 msw-release 文件夹的内容:there

还有:

$ ls /c/wxWidgets-3.1.3/msw-release/lib/
libwx_baseu_net-3.1.a  libwx_baseu-3.1.a     libwx_mswu_aui-3.1.a   libwx_mswu_gl-3.1.a    libwx_mswu_media-3.1.a     libwx_mswu_qa-3.1.a      libwx_mswu_richtext-3.1.a  libwx_mswu_webview-3.1.a  libwxregexu-3.1.a     wx
libwx_baseu_xml-3.1.a  libwx_mswu_adv-3.1.a  libwx_mswu_core-3.1.a  libwx_mswu_html-3.1.a  libwx_mswu_propgrid-3.1.a  libwx_mswu_ribbon-3.1.a  libwx_mswu_stc-3.1.a       libwx_mswu_xrc-3.1.a      libwxscintilla-3.1.a

我是不是忘记了什么?

要正确检测 wxWidgets,您需要 wx-config.

存在 wx-config 的 Windows 版本,可以从以下位置下载:https://github.com/kowey/wx-config-win

为了让wx-config知道你的wxWidgets在哪里,你需要设置以下环境变量:

  • WXWIN(在你的情况下为 C:/wxWidgets-3.1.3
  • WXCFG(在你的情况下 like msw/gcc_mswu)。