| # 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 COMPONENTS net gl core base) |
| |
| add_library(example example.cxx) |
| |
| if(wxWidgets_FOUND) |
| include(UsewxWidgets) |
| |
| # 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 COMPONENTS net gl core base) |
| |
| 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() |