Setting CMAKE_INSTALL_PREFIX from CMakeLists.txt f

2020-01-29 08:52发布

How do I set CMAKE_INSTALL_PREFIX in my root CMakeLists.txt file?

I have been doing

cmake_minimum_required(VERSION 2.8)
project(MyProject)

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

with the hopes that by installations would be destined to folders in the source tree. That is,

install(TARGETS my_exe DESTINATION bin/)

would install to ${CMAKE_SOURCE_DIR}/bin/. Instead, it keeps trying to write to /usr/local/bin (the default for Ubuntu 14.04).

I tried the answers to this question, but I still get the standard usr/local/ as my CMAKE_INSTALL_PREFIX when I check CMakeCache.txt.

The only working solution I have is to do

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

but this then removes the user's ability to specify where the bin directory to install is.

tl;dr I would like make install to automatically install to ${CMAKE_SOURCE_DIR} by default, rather than /usr/local/.

标签: cmake
1条回答
混吃等死
2楼-- · 2020-01-29 09:15

CMake developers suggest to use given pattern for change default value of CMAKE_INSTALL_PREFIX inside 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)

Using that approach

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

is not recommended:

.. solution depends on the implementation details of the PROJECT command and is very fragile since it works "accidentally" for some versions of CMake. I don't consider it to be an option at all.

查看更多
登录 后发表回答