我正在使用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上运行。
我尝试使用mingw32-make构建pdcurses。它创建了pdcurses.a我将它添加到与项目相同的位置,但它仍然显示它无法找到curses库。
我使用mingw的安装管理器,让它下载libpdcurses的.dll和dev包。试图通过clion运行cmake表明它仍未找到。所以我将它复制到windows32和项目文件夹中,但它仍然没有帮助。
我搜索了解决方案,但没有给出帮助
正如你所看到的,我不知道该怎么做。不幸的是,我既不是C ++用户,也不是Windows用户,我开始非常绝望。
答案 0 :(得分:2)
我需要构建一个跨平台项目,该项目在Linux和MacOS上使用ncurses,但在Windows上使用pdcurses。 curses的某些变体通常安装在流行的Linux发行版上。 ncurses也可以在MacOS上使用。对于Windows,情况并非如此。我的解决方案是下载pdcurses sources并编写一个cmake脚本以在Windows上构建它。 if (WIN32 or MSVC)
构建pdcurses else()
查找ncurses。您可能还想创建#include
的代理标头,具体取决于平台。
克隆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。我能够使用curses在Mac上编译PDcurses随附的示例程序,而不会遇到任何麻烦。希望对以后的读者有所帮助。