代码之家  ›  专栏  ›  技术社区  ›  graywolf

CMake在msys2下找不到静态wxWidgets

  •  2
  • graywolf  · 技术社区  · 7 年前

    我正试图用静态链接的wxWidgets构建一个项目(我只想指出,它编译链接和共享库很好)。这是我的 CMakeLists.txt

    set(wxWidgets_USE_STATIC ON)
    find_package(wxWidgets REQUIRED)
    

    $ make
    -- Boost version: 1.64.0
    -- Found the following Boost libraries:
    --   system
    --   filesystem
    --   program_options
    CMake Error at C:/Dev/msys64/mingw64/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
      Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES)
    Call Stack (most recent call first):
      C:/Dev/msys64/mingw64/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
      C:/Dev/msys64/mingw64/share/cmake-3.9/Modules/FindwxWidgets.cmake:953 (find_package_handle_standard_args)
      CMakeLists.txt:16 (find_package)
    
    
    -- Configuring incomplete, errors occurred!
    

    但是,安装了静态库

    $ ls -l /mingw64/lib | grep libwx
    -rw-r--r-- 1 tv185035 Domain Users 668K Sep 13 20:16 libwx_baseu_net-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 453K Sep 13 20:14 libwx_baseu_net-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users  84K Sep 13 20:16 libwx_baseu_xml-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users  68K Sep 13 20:14 libwx_baseu_xml-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 5.9M Sep 13 20:16 libwx_baseu-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 4.6M Sep 13 20:14 libwx_baseu-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 6.8M Sep 13 20:16 libwx_mswu_adv-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 3.2M Sep 13 20:14 libwx_mswu_adv-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 1.8M Sep 13 20:16 libwx_mswu_aui-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 1.1M Sep 13 20:14 libwx_mswu_aui-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users  28M Sep 13 20:16 libwx_mswu_core-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users  12M Sep 13 20:14 libwx_mswu_core-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 278K Sep 13 20:16 libwx_mswu_gl-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 175K Sep 13 20:14 libwx_mswu_gl-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 2.6M Sep 13 20:16 libwx_mswu_html-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 1.4M Sep 13 20:14 libwx_mswu_html-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 2.2M Sep 13 20:16 libwx_mswu_propgrid-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 1.6M Sep 13 20:14 libwx_mswu_propgrid-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 331K Sep 13 20:16 libwx_mswu_qa-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 193K Sep 13 20:14 libwx_mswu_qa-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 1.6M Sep 13 20:16 libwx_mswu_ribbon-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 646K Sep 13 20:14 libwx_mswu_ribbon-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 3.6M Sep 13 20:16 libwx_mswu_richtext-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 2.4M Sep 13 20:14 libwx_mswu_richtext-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 849K Sep 13 20:16 libwx_mswu_stc-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 2.1M Sep 13 20:14 libwx_mswu_stc-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 404K Sep 13 20:16 libwx_mswu_webview-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 634K Sep 13 20:14 libwx_mswu_webview-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users 4.4M Sep 13 20:16 libwx_mswu_xrc-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 1.1M Sep 13 20:14 libwx_mswu_xrc-3.0.dll.a
    -rw-r--r-- 1 tv185035 Domain Users  90K Sep 13 20:16 libwxregexu-3.0.a
    -rw-r--r-- 1 tv185035 Domain Users 2.7M Sep 13 20:16 libwxscintilla-3.0.a
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   graywolf    7 年前

    嗯,所以我没有让它工作 wxWidgets_USE_STATIC

    cmake_minimum_required(VERSION 3.9)
    
    set(PROJECT_NAME "jibril")
    
    project(${PROJECT_NAME})
    
    set(BUILD_SHARED_LIBS OFF)
    set(BUILD_STATIC_LIBS ON)
    
    string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower)
    
    if(NOT build_type_lower MATCHES debug)
        set(Boost_USE_STATIC_LIBS ON)
        set(Boost_USE_STATIC_RUNTIME ON)
    endif()
    find_package(
        Boost REQUIRED
            system
            filesystem
            program_options
    )
    find_package(wxWidgets REQUIRED)
    string(
        REPLACE
            ";-Wl,--subsystem,windows;-mwindows"
            ""
            wxWidgets_LIBRARIES
            "${wxWidgets_LIBRARIES}"
    )
    
    add_executable(
        ${PROJECT_NAME}
            src/main.cpp
    )
    target_include_directories(
        ${PROJECT_NAME}
            PUBLIC ${Boost_INCLUDE_DIRS}
            PUBLIC ${wxWidgets_INCLUDE_DIRS}
    )
    target_compile_options(
        ${PROJECT_NAME}
            PRIVATE -Wall
            PRIVATE -Wextra
            PRIVATE -Werror
            PRIVATE -Wduplicated-cond
            PRIVATE -Wduplicated-branches
            PRIVATE -Wlogical-op
            PRIVATE -Wrestrict
            PRIVATE -Wnull-dereference
            #PRIVATE -Wold-style-cast
            #PRIVATE -Wuseless-cast
            #PRIVATE -Wdouble-promotion
            PRIVATE -Wshadow
            #PRIVATE -Wformat=2
    )
    target_link_libraries(
        ${PROJECT_NAME}
            ${Boost_LIBRARIES}
            ${wxWidgets_LIBRARIES}
    
            optimized -static
            optimized -luuid
            optimized -lcomctl32
            optimized -loleacc
            optimized -lpng
            optimized -lz
            optimized -s
    )
    
        2
  •  1
  •   zhk_tiger    4 年前

    我已经成功了,

    set(wxWidgets_USE_LIBS ON) <-- add this before find_package
    find_package(wxWidgets REQUIRED)
    

    并在cmake中明确指定wxWidgets\u LIB\u DIR,例如,

    wxWidgets_LIB_DIR=W:/wxWidgets-3.0.4/lib/vc_x64_lib