[Cmake, PDCurses]: включение проклятий как в Linux, так и в Windows.

Я работаю над небольшим проектом на С++ и использую curses для пользовательского интерфейса. Я довольно хорошо могу заставить его работать в моей установке arch-linux, потому что настроить ncurses для работы там довольно просто. Но с моей настройкой cmake, которая хорошо работает в Linux, я не могу правильно заставить ее работать в Windows.

Вот мой 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})

Я попробовал несколько подходов, чтобы заставить его работать и в Windows.

1. Загрузка исходников

Я пытался собрать pdcurses с помощью mingw32-make. Он создал pdcurses.a. Я добавил его в то же место, что и проект, но он по-прежнему показывает, что не может найти библиотеку curses.

2. Загрузка через mingw32-get

Я использовал диспетчер установки от mingw и позволил ему загрузить как .dll, так и пакет dev libpdcurses. Просто попытка запустить cmake через clion показала, что он все еще не найден. Поэтому я скопировал его как в папку windows32, так и в папку проекта, но это все равно не помогло.

Я искал решение, но ни одно из приведенных не помогло

Как видите, я не знаю, что мне делать. К сожалению, я не пользователь C++ и не пользователь Windows, и я начинаю впадать в отчаяние.


person Jakub Peschel    schedule 03.05.2018    source источник
comment
В настоящее время find_package(Curses) не выполняет поиск pdcurses библиотеки: он ищет только curses и ncurses.   -  person Tsyvarev    schedule 03.05.2018
comment
И есть ли способ правильно установить CMakeList.txt, чтобы найти pdcurses только для Windows и find_package(Curses) для Linux?   -  person Jakub Peschel    schedule 03.05.2018
comment
@JakubPeschel Вам удалось решить эту проблему спустя 4 месяца?   -  person Indiana Kernick    schedule 11.09.2018
comment
@ Kerndog73, к сожалению, я не решил это правильно: D Я решил это, виртуализировав Linux на машине с Windows. Этого было достаточно для презентации, для которой мне это было нужно.   -  person Jakub Peschel    schedule 12.09.2018


Ответы (1)


Мне нужно было создать кроссплатформенный проект, который использует ncurses в Linux и MacOS, но использует pdcurses в Windows. Некоторые варианты curses обычно устанавливаются на популярные дистрибутивы Linux. ncurses также доступен на MacOS. То же самое не совсем верно для окон. Мое решение состояло в том, чтобы загрузить исходники pdcurses и написать скрипт cmake для его сборки в Windows. if (WIN32 or MSVC) построить pdcurses else() найти ncurses. Вы также можете создать заголовок прокси, который #includes pdcurses или ncurses в зависимости от платформы.

После клонирования репозитория github я скопировал заголовки в ., файлы C в ./pdcurses, исходники в ./wincon в новый каталог в моем проекте. Затем я написал файл CMakeLists.txt, чтобы скомпилировать все эти файлы в библиотеку. Это выглядело примерно так:

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}
)

Мой основной файл CMakeLists.txt скомпилировал исходники pdcurses, если целью является windows.

if(WIN32 OR MSVC)
        add_subdirectory(pdcurses)
        target_link_libraries(MyTarget
                PRIVATE
                PDcurses
        )
else()
        # find ncurses and use that
endif()

PDCurses кажется (более или менее) заменой ncurses в большинстве ситуаций. Я смог скомпилировать примеры программ, которые поставлялись с PDcurses на моем Mac, используя curses без каких-либо проблем. Надеюсь, это поможет будущим читателям.

person Indiana Kernick    schedule 12.09.2018