【问题标题】:Finding wxWidgets on CMake with CMAKE_PREFIX_PATH使用 CMAKE_PREFIX_PATH 在 CMake 上查找 wxWidgets
【发布时间】:2021-11-13 03:48:00
【问题描述】:

我正在尝试使用 find_package 查找 wxWidgets,它位于指向我的 CMAKE_PREFIX_PATH 的位置内,但是我没有成功。

如果我将环境变量 WXWIDGETS_ROOT_DIR 设置为 wxWidgets 安装,那么一切正常。但是,如果我将 CMAKE_PREFIX_PATH 设置为包含我的文件夹 wxWidgets-3.1.4 的文件夹,则找不到 wx。

我该如何解决这个问题?哪里有关于需要使用 WXWIDGETS_ROOT_DIR 的文档?我只是通过另一个堆栈溢出帖子才发现这一点的。

我的 CMakeLists.txt:

####################
#      Global      #
####################

cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 17)



#####################
#      Project      #
#####################

# Header files (relative to "include" directory)
set(HEADERS
    app.h
)

# Source files (relative to "src" directory)
set(SOURCES
    app.cpp
)

# Compiler definitions
set(DEFINES

)

# Compiler options
set(OPTIONS

)

# Project setup
project("CPP-Sandbox"
        VERSION "0.0.1"
        DESCRIPTION "Description"
        LANGUAGES CXX)

add_executable(CPP-Sandbox)

list(TRANSFORM HEADERS PREPEND "include/")
list(TRANSFORM SOURCES PREPEND "src/")

target_include_directories(CPP-Sandbox PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_sources(CPP-Sandbox PRIVATE ${SOURCES} ${HEADERS})
target_compile_definitions(CPP-Sandbox PRIVATE ${DEFINES})
target_compile_options(CPP-Sandbox PRIVATE ${OPTIONS})

set_target_properties(CPP-Sandbox PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "bin"
    WIN32_EXECUTABLE true
)



####################
#   Dependencies   #
####################


find_package(wxWidgets REQUIRED COMPONENTS core base)
include(${wxWidgets_USE_FILE})
target_link_libraries(CPP-Sandbox ${wxWidgets_LIBRARIES})

【问题讨论】:

  • "哪里有关于需要使用 WXWIDGETS_ROOT_DIR 的文档?" - 文档在这里:cmake.org/cmake/help/latest/module/FindwxWidgets.html。如果您想了解为什么设置 CMAKE_PREFIX_PATH 不起作用,那么您需要提供更多详细信息:您的代码、确切的错误消息、WxWidgets 的位置等等。
  • 我已经添加了我的 CMakeLists.txt,但我已经解释了响应。只是注意到找不到 wxWidgets。这放置在我的 CMAKE_PREFIX_PATH 文件夹中的文件夹“wxWidgets-3.1.4”中
  • "这被放置在我的 CMAKE_PREFIX_PATH 文件夹中的文件夹 "wxWidgets-3.1.4" 中 - 您可能需要将 wxWidgets-3.1.4 子目录添加到 CMAKE_PREFIX_PATH 变量中的路径中.至少,given script 不会在 wxWidgets-3.1.4 子目录下搜索。

标签: c++ cmake wxwidgets


【解决方案1】:

我在 Windows wxWidgets 3.1.4 上安装在 C:/wx314_install 下。它包含使用 wxWidgets 所需的头文件和库文件。之后,您需要为 CMake 设置不同的变量来查找库。

这是我的 CMakeFile.txt,我告诉 CMake 在哪里可以找到 wxWidgets,具体取决于程序正在编译、调试或发布的模式。或许,这最后一点可以做不同的事情。

cmake_minimum_required(VERSION 3.20)

message(STATUS "Building SUN")

set(wxWidgets_USE_DEBUG ON)
set(wxWidgets_USE_UNICODE ON)

IF(CMAKE_BUILD_TYPE MATCHES Release)
    message(STATUS "Release mode" )
    set(wxWidgets_ROOT_DIR C:/wx314_install/Release)
    set(wxWidgets_LIB_DIR C:/wx314_install/Release/lib/vc_x64_lib)
    set(wxWidgets_INCLUDE_DIRS C:/wx314_install/Release/include)
ENDIF()

IF(CMAKE_BUILD_TYPE MATCHES Debug)
    message(STATUS "Debug mode" )
    set(wxWidgets_ROOT_DIR "C:/wx314_install/Debug")
    set(wxWidgets_LIB_DIR C:/wx314_install/Debug/lib/vc_x64_lib)
    set(wxWidgets_INCLUDE_DIRS C:/wx314_install/Debug/include)
ENDIF()


message(STATUS "wxWidgets location ${wxWidgets_ROOT_DIR}")
# Note that for MinGW users the order of libs is important!

find_package(wxWidgets REQUIRED net gl core base)

include(${wxWidgets_USE_FILE})

add_executable(app WIN32)

target_sources(app PRIVATE
        src/app.cpp)

target_link_libraries(app PRIVATE ${wxWidgets_LIBRARIES})

这是从这个最小的project中提取的。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2021-01-16
    • 2018-05-18
    • 2018-10-19
    • 1970-01-01
    • 2023-02-23
    • 2020-12-09
    • 2021-07-07
    相关资源
    最近更新 更多