Files
CMake/Modules/UsewxWidgets.cmake
Peter Kokot e211e88501 FindwxWidgets: Update documentation
- Module documentation synced with other similar find modules.
- Added intro code block showing how to use this module.
- Added common sections to describe variables, imported targets moved to
  the top.
- Added examples section and highlighting the imported target usage.
2025-08-13 03:52:09 +02:00

104 lines
3.3 KiB
CMake

# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
UsewxWidgets
------------
This module serves as a convenience wrapper for using the wxWidgets
library (formerly known as wxWindows) and propagates its usage requirements,
such as library directories, include directories, and compiler flags, into
the current directory scope for use by targets.
Load this module in a CMake project with:
.. code-block:: cmake
include(UsewxWidgets)
This module calls :command:`include_directories` and
:command:`link_directories`, sets compile definitions for the current
directory and appends some compile flags to use wxWidgets library after
calling the :module:`find_package(wxWidgets) <FindwxWidgets>`.
Examples
^^^^^^^^
Include this module in a project after finding wxWidgets to configure its
usage requirements:
.. code-block:: cmake
:caption: ``CMakeLists.txt``
# Note that for MinGW users the order of libraries is important.
find_package(wxWidgets REQUIRED net gl core base)
add_library(example example.cxx)
if(wxWidgets_FOUND)
# Above also sets the wxWidgets_USE_FILE variable that points to this module.
include(${wxWidgets_USE_FILE})
# Link wxWidgets libraries for each dependent executable/library target.
target_link_libraries(example PRIVATE ${wxWidgets_LIBRARIES})
endif()
As of CMake 3.27, a better approach is to link only the
:module:`wxWidgets::wxWidgets <FindwxWidgets>` imported target to specific
targets that require it, rather than including this module. Imported
targets provide better control of the package usage properties, such as
include directories and compile flags, by applying them only to the targets
they are linked to, avoiding unnecessary propagation to all targets in the
current directory.
.. code-block:: cmake
:caption: ``CMakeLists.txt``
find_package(wxWidgets)
add_library(example example.cxx)
# Link the imported target for each dependent executable/library target.
target_link_libraries(example PRIVATE wxWidgets::wxWidgets)
See Also
^^^^^^^^
* The :module:`FindwxWidgets` module to find wxWidgets.
#]=======================================================================]
# Author: Jan Woetzel <jw -at- mip.informatik.uni-kiel.de>
if (wxWidgets_FOUND)
if (wxWidgets_INCLUDE_DIRS)
if(wxWidgets_INCLUDE_DIRS_NO_SYSTEM)
include_directories(${wxWidgets_INCLUDE_DIRS})
else()
include_directories(SYSTEM ${wxWidgets_INCLUDE_DIRS})
endif()
endif()
if (wxWidgets_LIBRARY_DIRS)
link_directories(${wxWidgets_LIBRARY_DIRS})
endif()
if (wxWidgets_DEFINITIONS)
set_property(DIRECTORY APPEND
PROPERTY COMPILE_DEFINITIONS ${wxWidgets_DEFINITIONS})
endif()
if (wxWidgets_DEFINITIONS_DEBUG)
set_property(DIRECTORY APPEND
PROPERTY COMPILE_DEFINITIONS_DEBUG ${wxWidgets_DEFINITIONS_DEBUG})
endif()
if (wxWidgets_CXX_FLAGS)
# Flags are expected to be a string here, not a list.
string(REPLACE ";" " " wxWidgets_CXX_FLAGS_str "${wxWidgets_CXX_FLAGS}")
string(APPEND CMAKE_CXX_FLAGS " ${wxWidgets_CXX_FLAGS_str}")
unset(wxWidgets_CXX_FLAGS_str)
endif()
else ()
message("wxWidgets requested but not found.")
endif()