FindCurses — CMake 4.1.1 Documentation

# FindCurses

Finds the curses or ncurses library.

Curses is a terminal control library for Unix-like systems, used to build text user interface (TUI) applications. Originally developed in 1978, it has since evolved into multiple implementations, most notably ncurses (new curses), BSD curses, and PDCurses (a public domain curses library for non-Unix platforms).

## Result Variables

This module defines the following variables:

`Curses_FOUND`

  Boolean indicating whether the Curses is found. For backward compatibility, the `CURSES_FOUND` variable is also set to the same value.

`CURSES_INCLUDE_DIRS`

  Added in version 3.1.

  The include directories needed to use Curses.

`CURSES_LIBRARIES`

  The libraries needed to use Curses.

`CURSES_CFLAGS`

  Added in version 3.16.

  Compiler flags which ought be given to C/C++ compilers when using Curses.

`CURSES_HAVE_CURSES_H`

  Boolean indicating whether `curses.h` is available.

`CURSES_HAVE_NCURSES_H`

  Boolean indicating whether `ncurses.h` is available.

`CURSES_HAVE_NCURSES_NCURSES_H`

  Boolean indicating whether `ncurses/ncurses.h` is available.

`CURSES_HAVE_NCURSES_CURSES_H`

  Boolean indicating whether `ncurses/curses.h` is available.

## Hints

This module accepts the following variables:

`CURSES_NEED_NCURSES`

  Set this variable to `TRUE` before calling `find_package(Curses)` if the the ncurses implementation functionality is specifically required.

`CURSES_NEED_WIDE`

  Added in version 3.10.

  Set this variable to `TRUE` before calling `find_package(Curses)` if Unicode (wide character) support is required.

## Deprecated Variables

The following legacy variables are provided for backward compatibility:

`CURSES_INCLUDE_DIR`

  Deprecated since version 3.1: Use the `CURSES_INCLUDE_DIRS` variable instead.

  Path to a Curses include directory.

`CURSES_LIBRARY`

  Deprecated since version 2.4: Use the `CURSES_LIBRARIES` variable instead.

  Path to Curses library.

## Examples

Finding Curses and creating an imported interface target for linking it to a project target:

    find_package(Curses)
    if(Curses_FOUND AND NOT TARGET Curses::Curses)
      add_library(Curses::Curses INTERFACE IMPORTED)
      set_target_properties(
        Curses::Curses
        PROPERTIES
          INTERFACE_LINK_LIBRARIES "${CURSES_LIBRARIES}"
          INTERFACE_INCLUDE_DIRECTORIES "${CURSES_INCLUDE_DIRS}"
      )
    endif()

    add_executable(app app.c)
    target_link_libraries(app PRIVATE Curses::Curses)

When ncurses is specifically required:

    set(CURSES_NEED_NCURSES TRUE)
    find_package(Curses)