如何在不再次运行配置脚本/cmake 的情况下修改安装路径
Posted
技术标签:
【中文标题】如何在不再次运行配置脚本/cmake 的情况下修改安装路径【英文标题】:how to modify the install-path without running the configure script/cmake again 【发布时间】:2012-11-08 23:18:42 【问题描述】:我正在开发一个需要大量时间来构建 (10-15) 分钟的项目。我已经重新编译以验证是否存在编译错误。现在我想更改安装目录,以便我拥有带有新更改的新版本的可执行文件。有没有一种方法可以只修改安装路径,以便“make install”安装到新位置而不是旧位置?
【问题讨论】:
Make install - but not to default directories? 的可能重复项 【参考方案1】:CMake 生成的 makefile 支持 DESTDIR coding convention 用于 makefile。因此,您可以通过在调用 make 时设置 DESTDIR
变量来覆盖默认安装位置:
$ make install DESTDIR=/opt/local
无需重新运行 CMake。
【讨论】:
我刚遇到这个,我认为这不应该是公认的答案。最好使用cmake . -DCMAKE_INSTALL_PREFIX=<some_install_path>
重新运行cmake,这不会重新编译您的项目。使用DESTDIR
文件仍然只准备了默认前缀(请参阅生成的install_manifest.txt
)。如果您想卸载等,这尤其糟糕。
此答案已发布于 21.1.2012,星期一...我在 28.6.2020,星期二尝试了此...我复制了此命令并修改了文件夹名称...并粘贴了它在终端..按回车..然后美妙的是,这在 2020 年仍然有效......谢谢@sakra【参考方案2】:
我不知道这是否普遍正确,但我可以举一个应用程序的例子,the accepted answer by sakra
不能正常工作。如果您在安装 ITK 时通过修改 DESTDIR
来修改安装目录,它只会将 DESTDIR
附加到其已形成的安装路径中:
make install DESTDIR=/opt/local
[...]
-- Installing: <strong>/opt/local/usr/local</strong>/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
另一方面,在 this answer 之后 Fraser
将导致正确的安装路径,而无需重新编译:
cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install
[...]
-- Installing: <strong>/opt/local</strong>/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
【讨论】:
【参考方案3】:使用-DCMAKE_INSTALL_PREFIX=<somewhere different to last time>
运行 CMake 不会导致您的项目需要重新编译。如果您将其他命令行参数传递给 CMake,例如更改编译器标志,会强制重建受影响的目标,但简单地更改安装前缀不会。
【讨论】:
有没有办法在不重新运行 cmake 的情况下更改安装前缀? CPACK 似乎有能力这样做,但我看不到直接使用 make + some variable 的方法。如果我想用我自己的打包程序创建一个包,我想在 /usr 而不是 /usr/local 下获取东西,但我希望它能够工作,而不必要求程序员使用正确的 CMAKE_INSTALL_PREFIX 运行 cmake。 . 好吧,你可以在你的 CMakeLists.txt 中使用set
来硬编码CMAKE_INSTALL_PREFIX
的值,但我认为这相当少见,可能会发现已经习惯 CMake 的人.也许更好的选择是在 CMakeLists.txt 中打印出message
,它显示CMAKE_INSTALL_PREFIX
的当前值,并提供有关如何更改值的说明。类似message("The install path is currently $CMAKE_INSTALL_PREFIX")
message("To change this run: cmake . -DCMAKE_INSTALL_PREFIX=\"<new install path>\"")
【参考方案4】:
DESTDIR 和前缀的规范定义是:文件安装到 $DESTDIR$prefix,但准备好好像它们的最终安装位置只是 $prefix。
所以 DESTDIR 仅适用于构建二进制包或 tarball 的人; CMAKE_INSTALL_PREFIX 适用于任何想要指定构建的二进制文件最终应该放在哪里的人。
【讨论】:
【参考方案5】:以防万一有人不使用 CMake,那么在 Makefile 中有一种方法可以做到这一点。如果您在构建目录中生成了 Makefile.config 文件,请找到 prefix
。这个prefix
是安装path
,将安装二进制文件/头文件等。更改此设置会将二进制文件/头文件安装到修改后的path
。
【讨论】:
以上是关于如何在不再次运行配置脚本/cmake 的情况下修改安装路径的主要内容,如果未能解决你的问题,请参考以下文章
如何在不丢失 docker 数据的情况下更新 prometheus 配置文件
ccache 在不删除 CMake 文件的情况下不会命中缓存