#c #cmake #wxwidgets
Вопрос:
Я пытаюсь использовать 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})
Комментарии:
1. «Где есть документация о том, что необходимо использовать WXWIDGETS_ROOT_DIR?» — Документация находится здесь: cmake.org/cmake/help/latest/module/FindwxWidgets.html . Если вы хотите узнать, почему настройка
CMAKE_PREFIX_PATH
не работает, вам необходимо предоставить более подробную информацию: ваш код, точное сообщение об ошибке, размещение wxWidgets и т. д.2. Я добавил свой CMakeLists.txt, но респт я уже объяснил. Это просто означает, что wxWidgets не могут быть найдены. Это помещено в папку «wxWidgets-3.1.4», которая находится внутри моей папки CMAKE_PREFIX_PATH
3. «Это помещено в папку «wxWidgets-3.1.4″, которая находится внутри моей папки CMAKE_PREFIX_PATH» — Вам, вероятно, нужно добавить этот
wxWidgets-3.1.4
подкаталог в путь вCMAKE_PREFIX_PATH
переменной. По крайней мере, данный скрипт не выполняет поиск вwxWidgets-3.1.4
подкаталоге.
Ответ №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})
Это извлечено из этого минимального проекта.