40

我正在做一个需要大量时间来构建(10-15)分钟的项目。我已经重新编译以验证是否存在编译错误。现在我想更改安装目录,以便我拥有带有新更改的新版本的可执行文件。有没有一种方法可以修改安装路径,以便“make install”安装到新位置而不是旧位置?

4

5 回答 5

60

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

$ make install DESTDIR=/opt/local

无需重新运行 CMake。

于 2012-11-21T07:33:03.850 回答
25

我不知道这是否普遍正确,但我可以举一个应用程序的示例,其中接受的答案无法sakra正常工作。如果您在安装 ITK 时通过修改来修改安装目录DESTDIR,它只会追加DESTDIR到其已形成的安装路径:

make install DESTDIR=/opt/local

[...]

-- Installing: /opt/local/usr/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]

另一方面,遵循此答案Fraser导致正确的安装路径而无需重新编译:

cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install

[...]

-- Installing: /opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]

于 2013-12-13T17:45:09.253 回答
19

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

于 2012-11-21T01:27:06.090 回答
10

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

所以 DESTDIR 仅适用于构建二进制包或 tarball 的人;CMAKE_INSTALL_PREFIX 适用于任何想要指定构建的二进制文件最终应该放在哪里的人。

于 2014-06-15T21:38:25.930 回答
4

以防万一有人不使用 CMake,那么在 Makefile 中有一种方法可以做到这一点。如果您在构建目录中生成了 Makefile.config 文件,请找到prefix. 这prefix是将安装path二进制文件/头文件等的安装。更改此设置会将二进制文件/头文件安装到修改后的path.

于 2013-03-13T21:19:20.910 回答