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:
- curl -O https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz
- tar zxf ncurses-*.tar.gz
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:
- curl -O https://www.libsdl.org/release/SDL2-2.28.0.tar.gz
- tar zxf SDL2-*.tar.gz
Install SDL2:
- cd SDL2-*/
- mkdir build
- cd build
- cmake ..
- make
- sudo make install
- cd ../..
Ddownload and unpack SDL_mixer source-code:
- curl -O https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.6.3.tar.gz
- tar zxf SDL2_mixer*.tar.gz
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 <unistd.h>
int main()
{
initscr();
clear();
refresh();
sleep(1);
endwin();
return(0);
}
Dazugehöriges CMakeLists.txt:
# 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
auf dem Terminal gesehen haben.
Wenn Unterstützung für Sound via SDL vorhanden ist, so gibt “cmake .” die Statusmeldung
aus.