为什么“CMAKE”的“CMAKE”安装前缀与我的“CMAKE”不同?

为什么“CMAKE”的“CMAKE”安装前缀与我的“CMAKE”不同?,cmake,Cmake,我使用cmake生成我的makefile,然后我想用ccmake检查cmake\u INSTALL\u前缀。,我不明白为什么ccmake。仍然显示默认的/usr/local作为我的cmake\u INSTALL\u前缀 消息输出和make install都表明我已正确设置了CMAKE\u install\u前缀,我只是想知道为什么ccmake给出了错误的信息?有什么想法吗 cmake_minimum_required(VERSION 2.8.7 FATAL_ERROR) PROJECT(ddd

我使用
cmake
生成我的makefile,然后我想用
ccmake检查
cmake\u INSTALL\u前缀。
,我不明白为什么
ccmake。
仍然显示默认的
/usr/local
作为我的
cmake\u INSTALL\u前缀

消息
输出和
make install
都表明我已正确设置了
CMAKE\u install\u前缀
,我只是想知道为什么
ccmake
给出了错误的信息?有什么想法吗

cmake_minimum_required(VERSION 2.8.7 FATAL_ERROR)

PROJECT(ddd)
SET(CMAKE_INSTALL_PREFIX "/home/bin")
MESSAGE ("CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
add_executable(ddd MACOSX_BUNDLE ddd.CPP)
set_property(TARGET ddd PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
INSTALL(TARGETS ddd DESTINATION .)

ccmake
显示的值来自CMake缓存,该缓存存储在
CMakeCache.txt
中。消息调用显示的值是一个局部变量
CMAKE\u INSTALL\u PREFIX
,您在该变量前面设置了一行,它隐藏了相同名称的缓存值

如果要更改缓存的值,请改用强制值:


请注意,一般来说,从CmakeList内部更改这些值不是一个好主意,因为这会使用户更改默认配置的任何尝试无效。在这种更改
CMAKE\u INSTALL\u PREFIX
的特殊情况下,您也可能会破坏Windows平台上的构建。

您是说,如果(例如在Windows上),如果没有“/home/bin”这样的路径,它将安装到“缓存路径”中存储的默认Windows路径?@Daniel我想说,它很可能会拒绝安装,而退出时会出现一条可能会令人非常困惑的错误消息。好吧,我明白了,我不会碰
缓存路径。非常感谢。CMAKE_INSTALL_前缀的处理方式与大多数其他变量不同。还有另一个变量CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT,如果未指定-DCMAKE_INSTALL_PREFIX,将设置该变量。然而,这适用于任何cmake呼叫。也就是说,如果您更新一个CMakeLists.txt并运行make,则会将CMAKE_INSTALL_PREFIX_SET_设置为默认值,因此在处理CMAKE_INSTALL_PREFIX时需要非常小心。
set(CMAKE_INSTALL_PREFIX "/home/bin" CACHE PATH "" FORCE)