[Cmake,PDCurses]:在linux和windows中启用curses

问题描述 投票:2回答:1

我正在使用c ++编写小项目,我正在使用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. Downloading sources

我试着用mingw32-make构建pdcurses。它创建了pdcurses.a我将它添加到与项目相同的位置,但它仍然显示它无法找到curses库。

2. Downloading via mingw32-get

我使用mingw的安装管理器,让它下载libpdcurses的.dll和dev包。试图通过clion运行cmake表明它仍未找到。所以我把它复制到windows32和项目文件夹中,但它仍然没有帮助。

我搜索了解决方案,但没有给出帮助

如你所见,我不知道该怎么做。不幸的是,我既不是C ++用户,也不是Windows用户,我开始非常绝望。

c++ windows cmake mingw32 pdcurses
1个回答
2
投票

我需要构建一个在Linux和MacOS上使用ncurses但在Windows上使用pdcurses的跨平台项目。 curses的一些变体通常安装在流行的linux发行版上。 ncurses也可以在MacOS上使用。对于Windows来说,情况并非如此。我的解决方案是下载pdcurses sources并编写一个cmake脚本,用于在Windows上构建它。 if (WIN32 or MSVC)构建pdcurses else()找到ncurses。您可能还想创建一个#includes pdcurses或ncurses的代理头,具体取决于平台。

在克隆了github repo后,我将.中的头文件,./pdcurses中的C文件,./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}
)

如果目标是windows,我的主要CMakeLists.txt文件编译了pdcurses源。

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

在大多数情况下,PDCurses似乎是(或多或少)替代ncurses的替代品。我能够使用curses在我的Mac上编译PDcurses附带的示例程序,没有任何麻烦。我希望这有助于未来的读者。

© www.soinside.com 2019 - 2024. All rights reserved.