【问题标题】:How to specify the path where CMake is installed in the CMakeLists.txt如何在 CMakeLists.txt 中指定 CMake 的安装路径
【发布时间】:2014-09-23 03:47:51
【问题描述】:

我从官网下载了便携版CMake,并安装在我的主目录(~/usr),因为我没有root和sudo权限。

如何在CMakeLists.txt中指定CMake的安装路径,如~/usr/cmake-path/bin/cmake

注意:我不想在 Linux 系统上使用默认版本的 CMake,因为它太旧了(2.6 版)

PS:

我知道变量CMAKE_COMMAND 可能对我的问题有用,但我不知道如何使用它!

【问题讨论】:

  • 为什么要这条路径?

标签: c++ linux cmake


【解决方案1】:

我觉得一个更强大的解决方案是将您的 cmake 路径添加到 PATH 环境变量中。

export PATH=~/usr/cmake-path/bin:$PATH

如果您在 Ubuntu/Debian 系统上,您可以将此命令添加到您的 ~/.bashrc 以在每个终端会话中执行它。请注意,此更改只会影响您的帐户,您可以在没有管理员权限的情况下进行设置。

这样你只需要输入cmake,就会首先找到想要的版本。

【讨论】:

  • 如果您只需要运行较新的 CMake 版本,这是非常合理的建议。我个人更喜欢显式方法,因为它通常更容易看出何时出现问题(例如,当自定义可执行文件因某种原因被移动或删除时),但我可以看到人们可能更喜欢这种方法以方便。
  • @ComicSansMS 有道理,但同时 CMake 要求设置 minimum_cmake_required (since version 2.6.0),如果设置为较新的版本,将很快引起用户的注意。跨度>
【解决方案2】:

CMake 将使用正在运行的 CMake 可执行文件所在的任何路径。此外,如果您在运行之间切换路径而不清除缓存,它可能会混淆。

所以你需要做的就是运行~/usr/cmake-path/bin/cmake <path_to_src>,而不是从命令行运行cmake <path_to_src>

您可能希望将别名或 shell 脚本添加到更易于键入的路径(因此您只需键入 my_cmake <path_to_src> 或类似的内容)。

请注意,仅通过编辑 CMakeLists.txt 并没有干净的方法来解决此问题。虽然理论上您可以让 CMake 2.6 运行一个外部 CMake 脚本,该脚本除了从 3.0 可执行文件运行一个内部 CMake 脚本之外什么都不做,但这只是一个肮脏的 hack。只需从命令行运行正确的可执行文件就可以了。

【讨论】:

  • 我必须先尝试一下,但是,cmake_need_version 仍然会检查系统的默认版本而不是自定义版本,尽管我设置了export alias cmake="~/usr/cmake-path/bin/cmake,无论如何,谢谢你的帮助!
  • @YoungkingWang 请确保您最终运行了正确的可执行文件。 cmake_minimum_required 不应该关心系统上任何其他已安装的版本,只查看当前运行的二进制文件。
【解决方案3】:

最好的建议是在沙盒环境中安装 cmake,而不是自己安装,这样可以保留整个环境,同时提高灵活性。 cmake 依赖于它的存在,否则你的环境就会变成“版本地狱”。

【讨论】:

    【解决方案4】:

    您在CMake 构建期间使用标志CMAKE_INSTALL_PREFIX 设置安装目录,如下所示:

    cmake path/to/sourcedir \
        -DCMAKE_INSTALL_PREFIX=path/to/install \
    

    不要忘记在任何CMAKE_FLAGS 前面加上-D

    如果您想在 CMakeLists.txt 中包含自定义安装前缀,则可以包含以下内容:

    SET(MY_INSTALL_PREFIX "/path/to/install" CACHE PATH "Prefix added to install directories")
    SET(CMAKE_INSTALL_PREFIX "${MY_INSTALL_PREFIX}" CACHE INTERNAL "Prefix added to install directories" FORCE)
    

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2021-12-16
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多