NCurses Installation

Im Folgenden sind die Schritte beschrieben, die zur Installation von NCurses notwendig sind - optional kann auch die SDL Bibliothek zur Sound-Unterstützung installiert werden:

Auf Ubuntu 16.04 - 22.04:

  • Voraussetzung: GCC und CMake
  • sudo apt-get install libncurses5-dev
  • Optional für Sound mit SDL:
    • sudo apt-get install libsdl1.2-dev libsdl-mixer1.2-dev

Auf Mac:

  • Voraussetzung: XCode command line tools und CMake
  • NCurses ist Bestandteil von BSD → keine weitere Installation notwendig
  • Optional für Sound mit SDL:
    • Mit Homebrew: brew install SDL2 SDL2_mixer
    • Oder manuelle Installation von SDL2 (siehe unten)
  • Oder Ubuntu in VirtualBox benutzen

Für andere Systeme als Ubuntu und Mac wird keine Garantie übernommen, in der Regel ist aber folgendes Prozedere zielführend:

Auf Debian und Linux Mint:

  • siehe unter Ubuntu

Auf anderen Linux Distributionen wie z.B. OpenSuse:

  • Manuelle Installation von NCurses 6.2 und SDL2 (siehe unten)

Auf Windows:

  • Ubuntu 18.04 mittels VirtualBox 6.0 benutzen
  • Das Windows-Subsystem for Linux (WSL) wird ausdrücklich nicht empfohlen!

Manuelle Installation von NCurses′ ’

Empfohlen nur für andere Systeme als Ubuntu!

Download and unpack NCurses source-code:

Install NCurses:

  • cd ncurses-*/
  • ./configure
  • make
  • sudo make install

fertig

Manuelle Installation von SDL2′ ’

Empfohlen nur für andere Systeme als Ubuntu (wie z.B. Mac)!

Download and unpack SDL2 source-code:

Install SDL2:

  • cd SDL2-*/
  • mkdir build
  • cd build
  • cmake ..
  • make
  • sudo make install
  • cd ../..

Ddownload and unpack SDL_mixer source-code:

Install SDL2_mixer:

  • cd SDL2_mixer-*/
  • ./configure
  • make
  • sudo make install
  • cd ..

fertig

NCurses Test

Zum Testen bitte dieses kleine Programm übersetzen:

main.cpp:

#include <ncurses.h>
#include <unistd.h>

int main()
{
   initscr();
   clear();
   refresh();
   sleep(1);
   endwin();
   return(0);
}

Dazugehöriges CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)

# project name
PROJECT(MyProject)

# specify sources and headers
SET(HDRS ) # module headers go here (*.h)
SET(SRCS main.cpp) # module implementations go here (*.cpp)

# C++ standard
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -Wall -Werror")
IF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.2)
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wvla")
ENDIF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.2)

# extend cmake module path
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)

# find NCurses
FIND_PACKAGE(Curses REQUIRED)
INCLUDE_DIRECTORIES(${CURSES_INCLUDE_DIRS})

# find SDL
FIND_PACKAGE(SDL QUIET)
IF (SDL_FOUND)
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}/..)
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}/SDL)
ENDIF (SDL_FOUND)

# find SDL mixer
FIND_PACKAGE(SDL_mixer QUIET)
IF (SDL_MIXER_FOUND)
   INCLUDE_DIRECTORIES(${SDL_MIXER_INCLUDE_DIR})
ENDIF (SDL_MIXER_FOUND)

# find SDL2
FIND_PACKAGE(SDL2 QUIET)
IF (SDL2_FOUND)
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR}/..)
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR}/SDL2)
ENDIF (SDL2_FOUND)

# find SDL2 mixer
FIND_PACKAGE(SDL2_mixer QUIET)
IF (SDL2_MIXER_FOUND)
   INCLUDE_DIRECTORIES(${SDL2_MIXER_INCLUDE_DIR})
ENDIF (SDL2_MIXER_FOUND)

# SDL check
IF ((SDL_FOUND AND SDL_MIXER_FOUND) OR (SDL2_FOUND AND SDL2_MIXER_FOUND))
   ADD_DEFINITIONS("-DHAVE_SDL")
   MESSAGE(STATUS "SDL found")
ENDIF ((SDL_FOUND AND SDL_MIXER_FOUND) OR (SDL2_FOUND AND SDL2_MIXER_FOUND))

# build and link executable
ADD_EXECUTABLE(main ${HDRS} ${SRCS}) # compile main executable
TARGET_LINK_LIBRARIES(main
   ${CURSES_LIBRARIES} # link with NCurses
   )
IF (SDL_FOUND AND SDL_MIXER_FOUND)
   TARGET_LINK_LIBRARIES(main
      ${SDL_LIBRARY} # link with SDL
      ${SDL_MIXER_LIBRARY} # link with SDL mixer
      )
ENDIF (SDL_FOUND AND SDL_MIXER_FOUND)
IF ((SDL2_FOUND AND SDL2_MIXER_FOUND) AND NOT (SDL_FOUND OR SDL_MIXER_FOUND))
   TARGET_LINK_LIBRARIES(main
      ${SDL2_LIBRARY} # link with SDL2
      ${SDL2_MIXER_LIBRARY} # link with SDL2 mixer
      )
ENDIF ((SDL2_FOUND AND SDL2_MIXER_FOUND) AND NOT (SDL_FOUND OR SDL_MIXER_FOUND))

Im Terminal übersetzen und ausführen mit:

cmake .
make && ./main

Man sollte nun für 1 Sekunde einen

leeren Bildschirm

auf dem Terminal gesehen haben.

Wenn Unterstützung für Sound via SDL vorhanden ist, so gibt “cmake .” die Statusmeldung

SDL found

aus.

Options: