【问题标题】:Enabling curses in both Linux and Windows在 Linux 和 Windows 中启用 curses
【发布时间】:2018-10-13 16:27:18
【问题描述】:

我正在使用 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。下载资源

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

2。通过mingw32-get下载

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

我不知道我应该做什么。不幸的是,我既不是 C++ 用户,也不是 Windows 用户。

【问题讨论】:

  • 目前 find_package(Curses) 不搜索 pdcurses 库:它只搜索 cursesncurses 库。
  • 有没有办法正确设置CMakeList.txt 以找到pdcurses 仅适用于windows 和find_package(Curses) 用于linux?
  • @JakubPeschel 4 个月后你解决了这个问题吗?
  • @Kerndog73 不幸的是我没有正确解决它:D 我通过在 Windows 机器上虚拟化 linux 解决了它。这对于我需要它的演示来说已经足够了。

标签: c++ windows cmake mingw32 pdcurses


【解决方案1】:

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

克隆 GitHub 存储库后,我将 . 中的标头、./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 的替代品。我能够在我的 Mac 上使用 curses 编译 PDcurses 附带的示例程序,没有任何麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2019-10-11
    • 2018-09-25
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多