如何在不再运行configure script/cmake的情况下修改安装路径

A. *_* K. 32 makefile configure cmake build-system

我正在开展一个需要相当长时间才能建成(10-15)分钟的项目.我已重新编译以验证是否存在编译错误.现在我想更改安装目录,以便我有一个新版本的可执行文件和新的更改.有没有一种方法可以修改安装路径,以便'make install'安装到新位置而不是旧位置?

sak*_*kra 46

CMake生成的makefile支持makefile的DESTDIR编码约定.因此,您可以通过DESTDIR在调用make时设置变量来覆盖默认安装位置:

$ make install DESTDIR=/opt/local
Run Code Online (Sandbox Code Playgroud)

没有必要重新运行CMake.

  • 我刚刚遇到这个,我认为这不应该是公认的答案.最好应该用`cmake重新运行cmake.-DCMAKE_INSTALL_PREFIX = <some_install_path>`这不会**重新编译你的项目.使用`DESTDIR`文件仍然只准备了默认前缀(参见生成的`install_manifest.txt`).如果要卸载等,这尤其糟糕. (5认同)

kar*_*niz 18

我不知道这是否是普遍事实,但我可以给它的应用的一个例子接受的答案sakra不正常.如果通过修改DESTDIR安装ITK时修改安装目录,它只会附加DESTDIR到已经形成的安装路径:

make install DESTDIR=/opt/local
Run Code Online (Sandbox Code Playgroud)

[...]

-- Installing: /opt/local/usr/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
Run Code Online (Sandbox Code Playgroud)

在另一方面,下面的这个答案通过Fraser将导致无需重新编译正确的安装路径:

cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install
Run Code Online (Sandbox Code Playgroud)

[...]

-- Installing: /opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
Run Code Online (Sandbox Code Playgroud)


Fra*_*ser 13

运行CMake -DCMAKE_INSTALL_PREFIX=<somewhere different to last time>不应该导致您的项目需要重新编译.如果将其他命令行参数传递给CMake,例如更改编译器标志,则会强制重建受影响的目标,但只是更改安装前缀不会.


小智 9

DESTDIR和前缀的规范定义是:文件安装到$ DESTDIR $前缀,但准备好它们的最终安装位置只是$前缀.

所以DESTDIR只适用于构建二进制文件包或tarball的人; CMAKE_INSTALL_PREFIX适用于任何想要指定构建的二进制文件最终应该存在的位置的人.