CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建

CMake WxWidgets project successfully built on linux but not on windows

本文关键字:构建 Windows Linux WxWidgets 项目 成功 CMake      更新时间:2023-10-16

我已经设法在Ubuntu 19.10上构建了一个基于CMake的WxWidgets,但在Windows 10上失败了,说它找不到WxWidgets,尽管我已经成功地构建了它(静态,发布和Unicode支持(。

WxWidgets 路径C:wxWidgets-3.1.3,构建目录C:wxWidgets-3.1.3msw-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 位来编译项目。在其子文件夹等/配置文件的底部,我添加了

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.3msw-releaselib"
-- 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.3msw-releaselib
-- 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 文件夹的内容 : 那里。

也:

$ 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.

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

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

  • WXWIN(在您的情况下C:/wxWidgets-3.1.3(
  • WXCFG(在您的情况下是like msw/gcc_mswu(。