CMake找不到Curses。

24

我正在尝试编译来自www.marcansoft.com的openlase库,但是在使用CMake时遇到了问题。 CMake返回一个错误,说明它无法找到Curses,在经过大量查找后,我仍然对问题感到困惑。我已检查我安装了各种ncurses包,但错误仍然存在。我对CMake并不是很熟悉,但我能够解决这个问题之前出现的其他依赖项问题。以下是终端中的输出。

tom@SILVER:~/dev/openlase$ cmake ./
-- Found JACK 
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:70 (MESSAGE):
  Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindCurses.cmake:159 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  examples/27c3_slides/CMakeLists.txt:3 (find_package)


-- Configuring incomplete, errors occurred!
任何帮助都将不胜感激。
  • 汤姆
6个回答

28

这是我如何解决Ubuntu 12.04 x86_64(64位)问题的方法(感谢syslogic)。

由于某种原因(可能是凌晨1点?),设置CURSES_USE_NCURSES TRUE好像没有起作用。所以我使用了一种hack方法。

已验证已安装:

$ sudo apt-get install libncurses5-dev

你会看到类似这样的信息:libncurses5-dev已经是最新版本。

因此,找到库并包含它。

$ locate libncurses.so

记下位置,例如我的位置是:/usr/lib/x86_64-linux-gnu/libncurses.so

$ locate curses.h

再次注意位置,例如我的位置是:/usr/include

<cmake源目录>/Modules/FindCurses.cmake中,在注释之后添加以下代码:

set( CMAKE_INCLUDE_PATH "/usr/include")
set( CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu/libncurses.so")

然后重复建立过程

./bootstrap
make 
sudo make install

ccmake现在应该已经安装好了。

祝你好运,


2
你可以设置cmake变量而不是编辑cmake文件:cmake -DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include ./ - Kyle

15

另一种解决方法是在FindCurses.cmake的顶部添加以下2行:

set(CURSES_LIBRARY "/opt/lib/libncurses.so")
set(CURSES_INCLUDE_PATH "/opt/include")

2
这是最终对我起作用的方法。使用“locate libncurses.so”查找.so文件的位置,并将其替换为上面给出的第一个SET中的位置。在Ubuntu上,我的文件位于“/lib/x86_64-linux-gnu/libncurses.so.5.9”。FindCurses.cmake在我的机器上位于“/usr/share/cmake-2.8/Modules/FindCurses.cmake”。 - Deadron

7

将 CURSES_USE_NCURSES 暂时设为 TRUE,以强制使用 NCURSES,而不是让 CMake 尝试查找 CURSES。


2
你也安装了相应的-dev软件包吗?在Ubuntu(以及可能是从Debian派生的任何系统)中,它是libncurses5-dev。其他系统可能会使用-devel或类似的标签。
编译器正在查找库头文件,这些文件不由标准软件包提供。(这些头文件仅在编译软件时需要,因此它们使得能够轻松地删除那些不需要进行任何软件编译的系统中的额外无用内容。)

刚刚双重检查了一下,那个软件包已经安装并且是最新的。 - waffleShirt
Cmake 有几个不同的库搜索路径:CMAKE_SYSTEM_LIBRARY_PATH 应该足够好,用于系统提供的库,CMAKE_LIBRARY_PATH 是为项目提供它们自己的路径。也许你的 ncurses.h 文件不在默认位置?你可能需要将包含它的目录添加到你的项目的 CMAKE_LIBRARY_PATH 中。 - sarnold
3
感谢你的帮助。我最终只是进入了FindCurses.cmake文件并强制让它使用NCURSES而不是CURSES。这立刻解决了所有问题。 - waffleShirt
对于任何感兴趣的人,FindCurses.cmake位于Cmake主目录下的Share目录中。 - ScottJShea
1
对于任何感兴趣的人,FindCurses.cmake位于Cmake主目录下的../Share/cmake-2.x/Modules目录中。(第一次可能有点含糊不清...) - ScottJShea

1
开源激光项目的维基页面未显示所有所需软件包。请查看其在Github上的维基页面以获取更新的说明。对于curses,缺少的软件包是libncurses5-dev。 sudo apt-get install libncurses5-dev

0

临时将CURSES_NEED_NCURSES设置为TRUE,以强制使用NCURSES,而不是让CMake尝试查找CURSES。

set(CURSES_NEED_NCURSES TRUE)

CURSES_USE_NCURSES 是由 FindCurses.cmake 在内部使用的,因此设置它不会有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接