c ++ - [[Cmake, PDCurses]]: Aktiverer forbandelser i både linux og windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på et lille projekt i c ++, og jeg bruger forbandelser til brugergrænsefladen. Jeg er ret pænt i stand til at få det til at fungere i min arch-linux installation, fordi det er ret nemt at oprette ncurses til at arbejde der. Men med min cmake-indstilling, der fungerer pænt ved linux, er jeg ikke i stand til at få det til at fungere korrekt i Windows.


Her er min CMakeList.txt


cmake\_minimum\_required(VERSION 3.9)
project(fighting\_pit)

find\_package(Curses REQUIRED)
include\_directories(${CURSES\_INCLUDE\_DIR})

set(CMAKE\_CXX\_STANDARD 11)

include\_directories( ./include)
include\_directories( ./src)
add\_executable(fighting\_pit
    include/Arena.h
    include/cursor.h
    include/Player.h
    include/spell.h
    include/Turns.h
    include/weapon.h
    include/Draw.h
    src/Arena.cpp
    src/cursor.cpp
    src/Player.cpp
    src/spell.cpp
    src/Turns.cpp
    src/weapon.cpp
    src/Draw.cpp
    main.cpp )

target\_link\_libraries(fighting\_pit ${CURSES\_LIBRARIES})


Jeg forsøgte flere tilgange for at få det til at fungere på Windows også.


1. Downloading af kilder



Jeg forsøgte at bygge pdcurses med mingw32-make. Det oprettede pdcurses.a Jeg tilføjede det til samme sted som projekt, men det viser stadig, at det ikke kan finde forbander bibliotek.


2. Download via mingw32-get



Jeg brugte installationsmanager fra mingw og lad det downloade både .dll og dev pakken af ​​libpdcurses. Bare forsøger at køre cmake gennem clion viste, at den stadig ikke er fundet. Så jeg kopierede det både til windows32 og projektmappe, men det hjalp det ikke.


Jeg søgte efter løsning, men ingen af ​​givne hjalp


Som du kan se, ved jeg ikke hvad jeg skal gøre. Desværre er jeg hverken C + + -bruger eller Windows-bruger, og jeg begynder at være ret desperat.

Bedste reference


Jeg havde brug for at opbygge et tværplatformsprojekt, der bruger ncurses på Linux og MacOS, men bruger pdcurses på windows. Nogle variant af forbandelser er normalt installeret på populære distributioner af Linux. Ncurses er også tilgængelig på MacOS. Det samme gælder ikke for Windows. Min løsning var at downloade pdcurses kilder og skrive et cmake script til at bygge det på windows. if (WIN32 or MSVC) build pdcurses else() find ncurses. Du vil måske også oprette en proxy header som #include s pdcurses eller ncurses afhængigt af platformen. [12]


Efter kloning af github repo kopierede jeg overskrifterne i ., C-filerne i ./pdcurses, kilderne i ./wincon til en ny mappe i mit projekt. Så skrev jeg en CMakeLists.txt fil for at kompilere alle disse filer i et bibliotek. Det så noget sådan ud:


cmake\_minimum\_required(VERSION 3.2)

add\_library(PDcurses
         # all of the sources
         addch.c
         addchstr.c
         addstr.c
         attr.c
         beep.c
         # ...
)
target\_include\_directories(PDcurses
        PUBLIC
        ${CMAKE\_CURRENT\_SOURCE\_DIR}
)


Min hovedfil CMakeLists.txt kompilerede pdcurses-kilderne, hvis målet er windows.


if(WIN32 OR MSVC)
        add\_subdirectory(pdcurses)
        target\_link\_libraries(MyTarget
                PRIVATE
                PDcurses
        )
else()
        # find ncurses and use that
endif()


PDCurses synes at være en (mere eller mindre) drop-in erstatning for ncurses i de fleste situationer. Jeg kunne kompilere eksempler programmer, der fulgte med PDcurses på min Mac ved hjælp af forbandelser uden problemer. Jeg håber det hjælper fremtidige læsere.