Установка CMAKE_INSTALL_PREFIX из файла CMakeLists.txt

Как установить CMAKE_INSTALL_PREFIX в моем корневом файле CMakeLists.txt?

Я делал

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).

Я попробовал ответы на этот вопрос, но я все еще получаю стандартный usr/local/ как мой CMAKE_INSTALL_PREFIX, когда я проверяю CMakeCache.txt.

Единственное рабочее решение, которое у меня есть, - это сделать

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

но затем удаляется возможность пользователя указывать, где находится каталог bin.

tl; dr Я бы хотел, чтобы make install автоматически устанавливалась на ${CMAKE_SOURCE_DIR} по умолчанию, а не /usr/local/.

Ответ 1

Разработчики CMake предложите использовать данный шаблон для значения по умолчанию для изменения CMAKE_INSTALL_PREFIX внутри CMakeLists.txt:

# 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. Я не считаю это вариантом вообще.