我知道也许这是一个愚蠢的问题,但是我无法看透,我在这里搜索了其他答案,这些答案非常接近我的,但是,我仍然不明白该怎么做。< / p>
问题是我无法编译在Windows中使用curses.h的'C'程序(我正在使用Clion和MinGW),当我尝试这样做时,它为函数提供了“未定义的引用” curses.h(例如'initscr','clear',...)。
通过MinGW Installation Manager我安装了“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进行编译,我应该在其中进行哪些更改?
答案 0 :(得分:5)
基本上与使用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
{li> CURSES_HAVE_NCURSES_H
ncurses.h
{li> CURSES_HAVE_NCURSES_NCURSES_H
ncurses/ncurses.h
{li> 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}")
也不要这样做。
您不希望任何生成的文件最终出现在您的源目录中(它们妨碍您的版本控制系统,或者更糟糕的是,实际签入到存储库)。您希望在二进制目录中生成所有内容,干净利落。