Makefile 如何在不再次运行配置脚本/cmake的情况下修改安装路径

Makefile 如何在不再次运行配置脚本/cmake的情况下修改安装路径,makefile,cmake,configure,build-system,Makefile,Cmake,Configure,Build System,我正在做一个项目,这需要相当长的时间来建立(10-15)分钟。我已重新编译以验证是否存在编译错误。现在我想更改安装目录,这样我就有了带有新更改的新版本的可执行文件。是否有一种方法可以修改安装路径,以便“make install”安装到新位置而不是旧位置?使用-DCMAKE\u install\u PREFIX=运行CMake不会导致您的项目需要重新编译。如果将其他命令行参数传递给CMake,例如更改编译器标志,则会强制重新生成受影响的目标,但仅更改安装前缀不会。CMake生成的makefiles

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

使用
-DCMAKE\u install\u PREFIX=
运行CMake不会导致您的项目需要重新编译。如果将其他命令行参数传递给CMake,例如更改编译器标志,则会强制重新生成受影响的目标,但仅更改安装前缀不会。CMake生成的makefiles支持for makefiles。因此,您可以通过在调用make时设置
DESTDIR
变量来覆盖默认安装位置:

$ make install DESTDIR=/opt/local

无需重新运行CMake。

以防有人不使用CMake,那么在Makefile中有一种方法可以做到这一点。如果在生成目录中生成了Makefile.config文件,请查找
前缀
。此
前缀
是安装二进制文件/头文件等的安装
路径。更改此选项将把二进制文件/头安装到修改后的
路径

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

make install DESTDIR=/opt/local
[……]

[……]
--安装:/opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[…]
DESTDIR和prefix的规范定义是:文件安装到$DESTDIR$prefix,但准备时就好像它们的最终安装位置只是$prefix一样

因此DESTDIR只适用于构建二进制文件包或tarball的人;
CMAKE_INSTALL_PREFIX适用于任何希望指定生成的二进制文件最终应位于何处的用户。

有没有方法在不重新运行CMAKE的情况下更改安装前缀?CPACK似乎能够做到这一点,但我看不到一种方法可以直接使用make+某个变量。如果我想用我自己的打包程序创建一个包,我想在/usr而不是/usr/local下运行,但我希望这样做不必要求程序员使用正确的cmake_INSTALL_前缀运行cmake…好吧,你可以在你的CMakeLists.txt中使用
set
来硬编码
cmake_INSTALL_前缀的值,但我认为这是相当罕见的,可能会吸引那些已经习惯于做CMake的人。也许更好的选择是在CMakeLists.txt中打印一条
消息
,其中显示
CMAKE\u INSTALL\u PREFIX的当前值
,并给出如何更改值的说明。类似于
message(“安装路径当前为${CMAKE\u install\u PREFIX}”)
message(“更改此运行:CMAKE.-DCMAKE\u install\u PREFIX=\“\”)
可能重复我刚刚遇到这个问题,我认为这不应该是公认的答案。最好是使用
cmake重新运行cmake-DCMAKE\u INSTALL\u PREFIX=
不会重新编译项目。使用
DESTDIR
时,文件仍然只准备了默认前缀(请参见生成的
install\u manifest.txt
)。如果您想卸载etc,这尤其糟糕。此答案已于2012年1月21日星期一发布。。。我在2020年6月28日星期二试过这个。。。我复制了此命令并修改了文件夹名称。。。我把它贴在了终端上。。按回车键。。而美妙的是,这在2020年仍然有效。。。谢谢你@sakra
-- Installing: /opt/local/usr/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install
-- Installing: /opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]