【问题标题】:Setting CMAKE_INSTALL_PREFIX from CMakeLists.txt file从 CMakeLists.txt 文件设置 CMAKE_INSTALL_PREFIX
【发布时间】:2016-09-14 03:15:00
【问题描述】:

如何在我的根 CMakeLists.txt 文件中设置 CMAKE_INSTALL_PREFIX?

我一直在做

cmake_minimum_required(VERSION 2.8)
project(MyProject)

# Set default install prefix
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})

希望通过安装将注定到源树中的文件夹。也就是说,

install(TARGETS my_exe DESTINATION bin/)

将安装到${CMAKE_SOURCE_DIR}/bin/。相反,它一直尝试写信给/usr/local/bin(Ubuntu 14.04 的默认设置)。

我尝试了this question 的答案,但是当我检查 CMakeCache.txt 时,我仍然得到标准的usr/local/ 作为我的 CMAKE_INSTALL_PREFIX。

我唯一可行的解​​决方案是做

install(TARGETS my_exe DESTINATION "${CMAKE_SOURCE_DIR}/bin/")

但这会导致用户无法指定要安装的 bin 目录在哪里。

tl;dr 我希望 make install 默认自动安装到 ${CMAKE_SOURCE_DIR},而不是 /usr/local/

【问题讨论】:

    标签: cmake


    【解决方案1】:

    CMake 开发人员 suggest 使用给定模式更改 默认 值在 CMakeLists.txt 内的 CMAKE_INSTALL_PREFIX

    # Use this snippet *after* PROJECT(xxx):
    IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
      SET(CMAKE_INSTALL_PREFIX <path> CACHE PATH <comment> FORCE)
    ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    

    使用这种方法

    # Use this snippet *before* PROJECT(xxx):
    SET(CMAKE_INSTALL_PREFIX <path> CACHE PATH <comment>)
    

    不推荐

    .. 解决方案取决于 PROJECT 命令的实现细节,并且非常脆弱,因为它在某些版本的 CMake 中“意外地”工作。我根本不认为这是一种选择。

    【讨论】:

    • CMAKE_INSTALL_PREFIX 的关键是使用 FORCE。
    • 您不想使用 FORCE 将其放入缓存的原因是因为这会消除传入的任何命令行选项。询问 CMake 是否使用默认值的建议非常可靠如果他们尝试使用命令行覆盖它,不会让用户感到困惑的解决方案。
    • 当您需要更改 CMAKE_INSTALL_PREFIX 并再次运行 cmake 时,这并不完全正确。它在第二次运行时未初始化为默认值,因此 FORCE 会清除用户试图替换它的任何内容。
    • @interfect:嗯,它适用于 CMake 3.5,刚刚经过测试。根据我的观察,CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 仅在 CMake 未在初始缓存中找到 CMAKE_INSTALL_PREFIX 时设置。也就是说,在没有给出-D CMAKE_INSTALL_PREFIX=&lt;...&gt; 选项的情况下,在第一个cmake 运行时,在进一步的cmake 上运行-U CMAKE_INSTALL_PREFIX 选项。因此,CMAKE_INSTALL_PREFIX 仅在上述情况下按预期设置为默认值。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多