如何在CMakeLists.txt中指定CMake安装路径

8

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

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

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

PS:

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


你为什么想要这个路径? - wRAR
4个回答

15

我认为更加稳健的解决方案是将您的cmake路径添加到PATH环境变量之前。

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

如果您使用的是Ubuntu/Debian系统,则可以将此命令添加到您的~/.bashrc中,以便在每个终端会话中执行它。请注意,此更改仅影响的帐户,并且您可以在不需要管理员权限的情况下进行设置。

这样一来,您只需要键入cmake,就会首先找到所需版本。


1
如果你只需要运行更新的CMake版本,那么这是非常合理的建议。个人而言,我更喜欢显式的方法,因为通常更容易看出问题所在(比如当自定义可执行文件由于某些原因被移动或删除时),但我可以理解人们可能会因为方便而更喜欢这种方法。 - ComicSansMS
1
@ComicSansMS 这很有道理,但同时CMake要求设置minimum_cmake_required自2.6.0版本起),如果设置为更新的版本,将会迅速引起用户的注意。 - jmstoker

4

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脚本,但那只是一个肮脏的黑客行为。只需从命令行中运行正确的可执行文件即可。


我之前尝试过这个,但是 cmake_need_version 仍然会检查系统的默认版本而不是自定义版本,尽管我已经设置了 export alias cmake="~/usr/cmake-path/bin/cmake"。无论如何,感谢你的帮助! - YoungkingWang
@YoungkingWang 请确保您最终运行的是正确的可执行文件。cmake_minimum_required 不应关注系统上安装的其他版本,而只应查看当前运行的二进制文件。 - ComicSansMS

0
最好的建议是在沙盒环境中安装cmake,而不是在自己的计算机上安装。这样可以保留整个环境并获得更高的灵活性。cmake对此有依赖,否则您的环境将变成“版本地狱”。

-2

您可以在 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)

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