CMake 找不到诅咒
Posted
技术标签:
【中文标题】CMake 找不到诅咒【英文标题】:CMake can't find Curses 【发布时间】:2011-06-08 09:55:30 【问题描述】:我正在尝试从 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!
任何帮助将不胜感激。
汤姆【问题讨论】:
【参考方案1】:你也安装了相应的-dev
包吗?在 Ubuntu(可能还有任何从 Debian 派生的东西)上,它是 libncurses5-dev
。其他系统可能会使用-devel
或类似的标签。
编译器正在寻找库头文件,而标准包没有提供这些头文件。 (运行时不需要这些头文件,只有在编译软件时才需要,因此它们可以轻松删除那些不会进行任何软件编译的系统的额外无用内容。)
【讨论】:
现在仔细检查一下,该软件包已经安装并且是最新的。 Cmake 有几个不同的库搜索路径:CMAKE_SYSTEM_LIBRARY_PATH 应该是足够好的系统提供的库,CMAKE_LIBRARY_PATH 是项目提供自己的路径。也许您的 ncurses.h 文件不在默认位置?您可能需要将包含它的目录添加到项目的 CMAKE_LIBRARY_PATH。 感谢您的帮助。我最终只是进入 FindCurses.cmake 文件并强制它使用 NCURSES 而不是 CURSES。立即清除所有内容。 对于任何感兴趣的人,FindCurses.cmake 位于 Cmake 主页的 Share 目录中。 对于任何感兴趣的人,FindCurses.cmake 位于 Cmake 主页的 ../Share/cmake-2.x/Modules 目录中。 (第一次有点模糊......)【参考方案2】:暂时将 CURSES_USE_NCURSES 设置为 TRUE 以强制使用 NCURSES,而不是让 CMake 尝试查找 CURSES。
【讨论】:
【参考方案3】:另一种解决方法是将这两行添加到 FindCurses.cmake(在顶部):
set(CURSES_LIBRARY "/opt/lib/libncurses.so")
set(CURSES_INCLUDE_PATH "/opt/include")
【讨论】:
这最终对我有用。使用“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。【参考方案4】:openlase wiki 没有显示所有需要的包。检查 github 上的 wiki 页面以获取更新的说明。对于 curses,缺少的包是 libncurses5-dev sudo apt-get install libncurses5-dev
【讨论】:
【参考方案5】:这是解决我在 Ubuntu 12.04 x86_64(64 位)上的问题的方法(感谢 syslogic)
无论出于何种原因(可能是凌晨 1:00?)设置 CURSES_USE_NCURSES TRUE 似乎都不起作用。所以我做了一份黑客工作。
验证已安装:
$ sudo apt-get install libncurses5-dev
你会看到一些大意:libncurses5-dev is already the newest version.
所以找到库并包含。
$ locate libncurses.so
注意位置,我的:/usr/lib/x86_64-linux-gnu/libncurses.so
$ locate curses.h
再次注意位置,我的:
/usr/include
在:<cmake source dir>/Modules/FindCurses.cmake
在顶部添加,就在 cmets 之后
set( CMAKE_INCLUDE_PATH "/usr/include")
set( CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu/libncurses.so")
然后冲洗重复构建过程
./bootstrap
make
sudo make install
现在应该安装 ccmake。
你的朋友,
【讨论】:
您可以设置 cmake 变量而不是编辑 cmake 文件:cmake -DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include ./
【参考方案6】:
暂时将 CURSES_NEED_NCURSES 设置为 TRUE 以强制使用 NCURSES,而不是让 CMake 尝试查找 CURSES。
set(CURSES_NEED_NCURSES TRUE)
CURSES_USE_NCURSES 由 FindCurses.cmake 内部使用,因此设置无济于事。
【讨论】:
以上是关于CMake 找不到诅咒的主要内容,如果未能解决你的问题,请参考以下文章