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

C++ CMake WxWidgets项目在linux上成功构建,但未在windows上成功构建,c++,windows,cmake,wxwidgets,mingw-w64,C++,Windows,Cmake,Wxwidgets,Mingw W64,我已经在Ubuntu19.10上基于CMake构建了一个WxWidgets,但是在Windows10上失败了,说它找不到WxWidgets,尽管我已经成功地构建了一个静态、发布和unicode支持的WxWidgets WxWidgets路径为C:\WxWidgets-3.1.3,构建目录为C:\WxWidgets-3.1.3\msw版本 生成文件是 cmake_minimum_required(VERSION 3.0) project(ChessPgnReviser VERSION 0.1.0

我已经在Ubuntu19.10上基于CMake构建了一个WxWidgets,但是在Windows10上失败了,说它找不到WxWidgets,尽管我已经成功地构建了一个静态、发布和unicode支持的WxWidgets

WxWidgets路径为C:\WxWidgets-3.1.3,构建目录为C:\WxWidgets-3.1.3\msw版本

生成文件是

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()
我使用MSYS64位来编译这个项目。在其子文件夹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发布文件夹的内容:

此外:


那么我忘了什么吗?

要正确检测wxWidgets,您需要wx配置

存在Windows版本的wx配置,可从以下位置下载:

要使wx配置知道wxWidgets的位置,需要设置以下环境变量:

WXWIN在您的案例中是C:/wxWidgets-3.1.3 在你的情况下,WXCFG与msw/gcc\mswu类似。
要正确检测wxWidgets,您需要wx配置

存在Windows版本的wx配置,可从以下位置下载:

要使wx配置知道wxWidgets的位置,需要设置以下环境变量:

WXWIN在您的案例中是C:/wxWidgets-3.1.3 在你的情况下,WXCFG与msw/gcc\mswu类似。
如何在命令行上调用cmake命令?我这样问是因为CMake日志文件被放在路径C:/Users上。。。使用Windows格式,但是wxWidgets_*变量使用路径/c/和Unix样式的格式。这让我觉得这些变量对CMake是不可见的,你验证过它们是可见的吗?您是否尝试过将wxWidget路径设置为CMake命令行参数?克马克-G MinGW Makefiles-DwxWidgets\u ROOT\u DIR=C:/wxWidgets-3.1.3谢谢。不幸的是,它没有起作用。请看我编辑的帖子。此外,我还成功地调用了ls$wxWidgets\u ROOT\u DIR。我记得,在构建wxWidgets时,您需要构建两次才能克服一些错误。当构建两次都不起作用时,此线程可能会对您有所帮助。如果检测使用了wx config,您可以尝试安装。要告诉它wxWidgets在哪里,您需要将环境变量WXWIN设置为C:/wxWidgets-3.1.3,并将WXCFG设置为类似msw\gcc_mswu.Hi@BrechtSanders的值。实际上,我需要wx配置,我已经安装了它,因为cmake函数FindWxWidgets是基于wx配置的。然而,我仍在努力使它与我的cmake脚本一起工作,以便构建能够成功。我已经设置了WXWIN和WXCFG变量。您如何在命令行上调用cmake命令?我这样问是因为CMake日志文件被放在路径C:/Users上。。。使用Windows格式,但是wxWidgets_*变量使用路径/c/和Unix样式的格式。这让我觉得这些变量对CMake是不可见的,你验证过它们是可见的吗?您是否尝试过将wxWidget路径设置为CMake命令行参数?克马克-G MinGW Makefiles-DwxWidgets\u ROOT\u DIR=C:/wxWidgets-3.1.3谢谢。不幸的是,它没有起作用。请看我编辑的帖子。此外,我还成功地调用了ls$wxWidgets\u ROOT\u DIR。我记得,在构建wxWidgets时,您需要构建两次才能克服一些错误。当构建两次都不起作用时,此线程可能会对您有所帮助。如果检测使用了wx config,您可以尝试安装。要告诉它wxWidgets在哪里,您需要将环境变量WXWIN设置为C:/wxWidgets-3.1.3,并将WXCFG设置为类似msw\gcc_mswu.Hi@BrechtSanders的值。实际上,我需要wx配置,我已经安装了它,因为cmake函数FindWxWidgets是基于wx配置的。然而,我仍在努力使它与我的cmake脚本一起工作,以便构建能够成功。我已经设置了WXWIN和WXCFG变量。谢谢。我还必须重新编译wxWidgets,以便在子文件夹msw/gcc_mswu中设置静态库。为此,我进入了msw文件夹,并使用mingw32-make.exe进行编译,而不是自己创建msw发布文件夹。通过这种方式,并将wx配置设置为路径,它起了作用。@loloof64我构建了wxWidgets,没有共享DLL,包括调试和发布。我没有为WXCFG变量指定msw/gcc\u mswu文件夹。这是必须的吗\bin文件夹:有wx-config.exe、wxrc.exe\lib有*mswu*.afiles@VaisakMohan检查共享生成的lib/gcc_lib或lib/gcc_dll。通常,您应该在其中找到类似msw/build.cfg/mswd/build.cfg/mswu/build.cfg/mswud/build.cfg的内容。这是您应该在WXCFG中指定的。wxWidgets安装文件夹中没有名为build.cfg的文件。这是我的文件夹树:。当我只在windows终端中键入wx config-libs-cflags时,它会给出错误:wx config error:wxWidgets未安装在'X:\SYSTEM\wxWidgets'。@VaisakMohan该树实际上是wxWidgets的windows构建吗?通常安装文件夹将包含build.cfg…谢谢。我还必须重新编译wxWidgets
因此,静态库设置在子文件夹msw/gcc_mswu中。为此,我进入了msw文件夹,并使用mingw32-make.exe进行编译,而不是自己创建msw发布文件夹。通过这种方式,并将wx配置设置为路径,它起了作用。@loloof64我构建了wxWidgets,没有共享DLL,包括调试和发布。我没有为WXCFG变量指定msw/gcc\u mswu文件夹。这是必须的吗\bin文件夹:有wx-config.exe、wxrc.exe\lib有*mswu*.afiles@VaisakMohan检查共享生成的lib/gcc_lib或lib/gcc_dll。通常,您应该在其中找到类似msw/build.cfg/mswd/build.cfg/mswu/build.cfg/mswud/build.cfg的内容。这是您应该在WXCFG中指定的。wxWidgets安装文件夹中没有名为build.cfg的文件。这是我的文件夹树:。当我只在windows终端中键入wx config-libs-cflags时,它会给出错误:wx config error:wxWidgets未安装在'X:\SYSTEM\wxWidgets'。@VaisakMohan该树实际上是wxWidgets的windows构建吗?通常安装文件夹将包含build.cfg。。。
$ 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