我知道也许这是一个愚蠢的问题,但我无法看透它,我在这里搜索了其他答案,这些答案与我的非常接近,但是,我仍然不明白该怎么做。
问题是我无法编译在Windows中使用curses.h的“C”程序(我正在将Clion与MinGW一起使用),当我尝试这样做时,它为curses.h中的函数提供“未定义的引用” (例如“initscr”、“清除”...)。
通过 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 一起编译?
基本上与您定位和集成的方式相同any使用 CMake 的第三方库:使用打包的之一Find___.cmake
模块。
这些位于share/cmake-X.Y/Modules
您的 CMake 安装目录。检查文件本身的单独文档,并且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
for curses.h
-
CURSES_HAVE_NCURSES_H
for ncurses.h
-
CURSES_HAVE_NCURSES_NCURSES_H
for ncurses/ncurses.h
-
CURSES_HAVE_NCURSES_CURSES_H
for ncurses/curses.h
附加建议:
file(GLOB Project1_SRC
"*.h"
"*.c"
)
不要那样做。
引用该函数的文档:
我们不建议使用 GLOB 从源树中收集源文件列表。如果添加或删除源时 CMakeLists.txt 文件没有更改,则生成的构建系统无法知道何时要求 CMake 重新生成。
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
也不要这样做。
你不想要any生成的文件最终会出现在您的source目录(它们会妨碍版本控制系统,或者更糟糕的是,实际上会签入存储库)。你想要生成中的所有内容binary目录,完全不妨碍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)