2016-09-14 111 views
4

如何在我的根CMakeLists.txt文件中設置CMAKE_INSTALL_PREFIX?從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/

回答

9

CMake的開發suggest使用給定的模式變革默認值 CMAKE_INSTALL_PREFIXCMakeLists.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版本「意外」工作。我根本不認爲它是一個選項。

+0

CMAKE_INSTALL_PREFIX的關鍵是使用FORCE。 –

+2

您不希望使用FORCE將其放入緩存的原因是因爲這消除了傳入的任何命令行選項。要求CMake使用默認值的建議是一個非常健壯的解決方案,不會混淆用戶如果他們嘗試使用命令行覆蓋它。 – KymikoLoco