我使用自动工具构建了
C++
代码,即./configure && make && make install
,但现在我想更改代码安装的目录,所以我应该这样做./configure --prefix=${INSTALL_DIR} && make && make install
。
现在是否重新编译整个代码(我想不惜一切代价避免这种情况),如果是,还有其他选择吗?
我听说过
export DESTDIR="${INSTALL_DIR}" && make install
技巧,但我也听说这会以某种方式保留对安装目录的引用以及二进制文件中的相对路径。到目前为止,我还没有在任何地方找到这两种方法差异的良好解释
我们无法告诉您这些问题的任何答案,因为它们都 100% 取决于您的项目及其配置方式。您实际上尝试过运行上述命令吗?发生了什么?这是为了获得更多有用的信息,并且比询问 us 会发生什么更容易获得。
在大多数autoconf项目中
./confgure
将创建一个包含配置的头文件config.h
,并且在大多数项目中该头文件包含在所有源文件中,因此修改该文件确实会导致所有内容都被重建。
在大多数 autoconf 项目中,
config.h
文件不会更新(因此不会重建任何内容),除非其内容发生更改。
在某些 autoconf 项目中,前缀目录在
#define
文件中以 config.h
的形式提供,因此在这些 autoconf 项目中,如果更改 --prefix
的值,则 config.h
将被更新,并且所有代码都将被更新重建。
您的项目是否属于上述“大多数”和“部分”类别,只有您自己说了算。
至于
--prefix
和 DESTDIR
之间的区别,您已经发现了:--prefix
的值是在配置时设置的,并且可以(取决于项目)作为硬编码路径编译到代码本身中(但这通常被认为是不可取的:项目应该使用相对路径,或者在不可能的情况下提供一些环境变量或选项来重置此路径)。
DESTDIR
在编译时不可用,是一个安装时设置,仅更改 makefile 将文件复制到的位置,而不更改 --prefix
设置的任何编译路径。