[Cmake,PDCurses]:在Linux和Windows中都启用curses

Jak*_*hel 3 c++ windows cmake pdcurses mingw32

我正在用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})
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法使其也可以在Windows上运行。

1.下载源

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

2.通过mingw32-get下载

我使用了mingw的安装管理器,并让它下载了.dll和libpdcurses的dev软件包。只是尝试通过cmion运行cmake仍未找到。所以我将其复制到Windows32和项目文件夹中,但仍然没有帮助。

我在寻找解决方案,但没有一个帮助

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

Ker*_*g73 5

我需要构建一个跨平台项目,该项目在Linux和MacOS上使用ncurses,但在Windows上使用pdcurses。curses的某些变体通常安装在流行的Linux发行版上。ncurses也可以在MacOS上使用。对于Windows,情况并非如此。我的解决方案是下载pdcurses源并编写一个cmake脚本以在Windows上构建它。if (WIN32 or MSVC)建立pdcurses else()查找ncurses。您可能还希望创建一个#includeprs或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}
)
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt如果目标是Windows,我的主文件将编译pdcurses源。

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

在大多数情况下,PDCurses似乎(或多或少)替代了ncurses。我能够使用curses在Mac上编译PDcurses随附的示例程序,而不会遇到任何麻烦。希望对以后的读者有所帮助。