【问题标题】:Right way to tell CMake to find (n)curses in non-default location?告诉 CMake 在非默认位置查找 (n) 诅咒的正确方法?
【发布时间】:2015-09-09 09:55:14
【问题描述】:

我有一个使用 FindCurses.cmake 的 CMake 项目。我在 OS X 上,其中操作系统附带旧版本的 ncurses(并且似乎不包含 C++ 绑定),并且我尝试构建的代码需要 ncurses 5.9。我使用 homebrew 安装了 5.9,但是像一个好邻居一样,homebrew 不会覆盖操作系统附带的 curses/ncurses 资源(我也不希望它这样做。)

我的直觉是,我应该能够在不编辑 CMake 文件的情况下做到这一点,对吧? (因为这种行为变化是特定于我的构建环境的,而不是对项目本身的变化,对吧?)对于 autoconf 项目,我可能会在运行 ./configure 之前添加 CFLAGSLDFLAGS 环境变量,但是CMake 似乎还有很多事情要做。

在 CMake 中执行此操作的惯用方式是什么?

【问题讨论】:

    标签: macos cmake


    【解决方案1】:

    您可以通过CMAKE_PREFIX_PATH 提供其他搜索路径。 首先搜索CMAKE_PREFIX_PATH 中的路径。

    您可以在 CMakeLists.txt 文件中硬编码或最好通过以下方式指定 CMAKE_PREFIX_PATH

    cmake -D CMAKE_PREFIX_PATH=/path/where/brew/installed/curses .
    

    【讨论】:

    • 不幸的是,即使使用此选项,它仍然会在更“标准”的位置找到那些。即我做cmake -D CMAKE_PREFIX_PATH=/usr/local/Cellar/ncurses/5.9 ..,它仍然使用来自/usr/lib的诅咒。我已经确认没有CMAKE_PREFIX_PATH 的硬编码实例。 :(
    • @ipmcc 你在运行cmake -D CMAKE_PREFIX_PATH=...之前清理了CMake缓存吗?
    • 我刚刚rm -rf'ed 我的构建目录并重试,它成功了!谢谢!有没有更惯用的方法来清除 CMake 缓存?还是这样?
    • @ipmcc No, there is no cmake clean。删除 out-of-source-build-directory 是要走的路。 (旁注:cmake-gui 提供了“删除缓存”选项)
    • 谢谢!我在这上面浪费了一天,觉得自己很愚蠢。 :)
    【解决方案2】:

    您可以在 CMakeLists.txt 中添加指向您的 ncurses 版本的 include_directories 和 link_directories。

    我还会尝试查找 ncurses 5.9 是否具有 pkg​​-config 模块。请参阅 pkg-config --list-all。

    【讨论】:

    • 我没有对你投反对票,但是......我确实特别问过如何在不编辑 CMake 文件的情况下做到这一点,你没有解释为什么我会关心 ncurses-5.9 是否有 pkg​​- config 模块(即这对我有什么帮助。)顺便说一句,当我执行pkg-config --list-all 时它不会出现。
    • 由于您使用的是 CMake 并且您知道添加它的模块,但我知道您知道 CMake 有一个 pkg-config 模块并且..因为您使用的是 ncurses,所以您必须知道在一些发行版有一个 ncurses 的 pkg-config 条目,例如我有它:pkg-config --modversion ncurses,这样你就不需要每次编译时都设置环境,只有当你没有标准路径中的开发文件。
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多