您通常会调用以下命令来构建./configure
d产品:
make
make install
好的,该产品现在在系统中。然后,您更改一些源代码文件并仅调用make install
。问题是,install
目标的传统实现是否需要重新编译可执行文件,或者只应将旧文件复制到适当的系统路径?
答案 0 :(得分:3)
make
如果您的依赖关系设置正确,则按设计处理。
如果make
构建名为helloworld
的二进制文件。您可能会编写install
目标,以便将此helloworld
二进制文件从源目录复制到/usr/bin
。
这意味着安装目标应该依赖于helloworld二进制文件,这也意味着如果二进制文件helloworld
不是最新的,它将被重新编译。当你输入make install时,你可以隐式调用make
(这里是默认目标)。
答案 1 :(得分:3)
当然,这取决于你喜欢的传统。这是GNU convention:
安装强>
编译程序并将可执行文件,库等复制到它们应驻留的文件名中以供实际使用。
这似乎是明智的惯例:让make install
安装过时的可执行文件通常只会导致混淆。
答案 2 :(得分:2)
是的,编写良好的makefile将install
依赖于正在安装的可执行文件(或all
),因此在安装之前它将确保可执行文件是最新的。
分裂有几个原因。通常,默认目标是all
并且不安装文件,只构建它们。对于开发人员来说,这意味着他们可以轻松地在其工作环境中构建源代码,而不会影响其他系统。对于最终用户,这意味着他们可以作为普通用户运行构建,然后只以root身份运行make install
。
这确实意味着从技术上讲,make
的{{1}}阶段是多余的。