提问人:Aster 提问时间:2/3/2016 更新时间:2/3/2016 访问量:5689
如何在Cmake中链接curses.h?
How to link curses.h in Cmake?
问:
我知道也许这是一个愚蠢的问题,但我看不透它,我在这里搜索了其他答案,这些答案与我的答案非常接近,但是,我仍然不明白该怎么做。
问题是我无法在 Windows 中编译使用 curses.h 的“C”程序(我正在将 Clion 与 MinGW 一起使用),当我尝试这样做时,它会为 curses.h 中的函数提供“未定义的引用”(例如“initscr”、“clear”......
通过 MinGW 安装管理器,我安装了“mingw-32-libpdcurses”(有两个不同的类:dev 和 dll;我安装了dll)。
我使用的 CMAKEfile 是这样的:
cmake_minimum_required(VERSION 3.3)
project(Project1)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -lpdcurses")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
file(GLOB Project1_SRC
"*.h"
"*.c"
)
add_executable(Project1 ${Project1_SRC})
我应该更改什么才能使其使用 curses.h 编译?
答:
与查找任何第三方库并将其与 CMake 集成的方式基本相同:使用打包的模块之一。Find___.cmake
它们位于 CMake 安装目录中。检查文件本身的各个文档,以及如何调用它们的详细信息。share/cmake-X.Y/Modules
cmake --help-command find_package
我没有专门在 MinGW 上使用 PDCurses 尝试过以下操作,但如果它不起作用,那将是向 Kitware(CMake 的制造商)报告的明确错误报告:
find_package( Curses REQUIRED )
include_directories( ${CURSES_INCLUDE_DIRS} )
target_link_libraries( Project1 ${CURSES_LIBRARIES} )
根据需要设置以下变量,以告知您哪个标头可用:
CURSES_HAVE_CURSES_H
为curses.h
CURSES_HAVE_NCURSES_H
为ncurses.h
CURSES_HAVE_NCURSES_NCURSES_H
为ncurses/ncurses.h
CURSES_HAVE_NCURSES_CURSES_H
为ncurses/curses.h
其他建议:
file(GLOB Project1_SRC
"*.h"
"*.c"
)
别这样。
引用该函数的文档:
我们不建议使用 GLOB 从源代码树中收集源文件列表。如果在添加或删除源时没有 CMakeLists.txt 文件更改,则生成的生成系统无法知道何时要求 CMake 重新生成。
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
也不要那样做。
您不希望任何生成的文件最终出现在您的源目录中(它们会妨碍您的版本控制系统,或者更糟的是,实际上会签入存储库)。您希望在二进制目录中生成所有内容,完全不碍事。
评论
set( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
评论
CMAKE_EXE_LINKER_FLAGS