我知道这可能是一个愚蠢的问题,但我看不透,我在这里寻找其他答案,这是非常接近我的,但是,我仍然不知道如何去做。
问题是我不能编译在Windows中使用curses.h的“C”程序(我在MinGW中使用Clion),当我尝试这样做时,它给出了curses.h中的函数的“未定义的引用” (如'initscr','clear',…)。
通过MinGW安装pipe理器我安装了“mingw-32-libpdcurses”(有两个可用的两个不同的类:dev和dll;我安装了dll)。
我使用的CMAKE文件是这样的:
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-XY/modulees
中。 检查文件本身是否有他们自己的文档,以及cmake --help-command find_package
了解如何调用它们的详细信息。
我还没有在MinGW上用特殊的方法尝试以下方法,但是如果不行的话,那么可以向Kitware(CMake的开发者)提出一个明确的错误报告:
find_package( Curses REQUIRED ) include_directories( ${CURSES_INCLUDE_DIRS} ) target_link_libraries( Project1 ${CURSES_LIBRARIES} )
以下变量可以根据需要设置,以告诉您哪个头可用:
curses.h
CURSES_HAVE_CURSES_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}")
不要那样做。
你不希望任何生成的文件在你的源代码目录(它们妨碍你的版本控制系统,或者更糟的是,实际上被检入到版本库)中。 你想要在二进制目录中生成所有的东西,干干净净。