如何使用CMAKE_INSTALL_PREFIX

Ale*_*x F 87 linux installation cmake

我想用安装目标生成Makefile,安装到/ usr而不是默认的/ usr/local.假设构建目录在源子目录中完成,我执行:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt包含:( CMAKE_INSTALL_PREFIX:PATH=/usr好吗?)

现在我执行:

make
make install

所有文件仍然安装到usr/local.怎么了?

编辑:任何CMakeLists.txt项目文件中都没有CMAKE_INSTALL_PREFIX.在运行cmake之前,我从输出目录中删除了所有内容.CMakeLists.txt中的install指令如下所示:

install(TARGETS mylibrary DESTINATION lib)

Job*_*Job 111

那应该是(参见文档):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Run Code Online (Sandbox Code Playgroud)


rya*_*_tu 21

有两种方法可以使用此变量:

  • 将它作为命令行参数传递,就像Job提到的那样:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • CMakeLists.txt以下内容中为其赋值:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    但是请记住将它放在BEFORE PROJECT(< project_name>)命令之外,否则它将无法工作!

  • 奇怪的是,只有在PROJECT()语句(CMake 2.8)之后放置它时,SET()语句才适用于我. (4认同)
  • [这个答案](http://stackoverflow.com/a/39485990/1938798) 及其链接的参考更直接地讨论了 project() 命令之前/之后的问题。 (3认同)

Jim*_*Jim 5

但是请记住将其放置在PROJECT(<project_name>)命令之前,否则将不起作用!

我使用cmake的第一周-经过几年的GNU autotools-所以我仍然在学习(最好写m4宏),但是我认为设置项目修改CMAKE_INSTALL_PREFIX 是更好的地方。

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
project (BarkBark)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
Run Code Online (Sandbox Code Playgroud)

首次运行(无缓存)

CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- The C compiler identification is GNU 4.4.7
-- etc, etc,...
CIP = /usr/local (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)

第二次

CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)

如果我弄错了,请告诉我,我有很多学习要做。好有趣。

  • 执行 SET 时尝试使用 FORCE: set (CMAKE_INSTALL_PREFIX /foo/bar/bubba CACHE PATH "Cmake prefix" FORCE) (2认同)