我正在几台机器上进行Linux开发,主要是Slackware 13.37和Ubuntu 12.04。我正在测试和验证一些简单的makefile的结果,并想确认make install
的输出。但是,在我继续测试之前,我想知道是否有一种可移植的方法来更改任何makefile的make install
的默认输出目的地。
我更愿意,如果我可以以某种方式暂存我的输出,所以所有输出都转到,例如:
/test/bin
/test/lib
/test/usr/bin
而不是:
/bin
/lib
/usr/bin
我知道在QNX开发环境中,例如,我可以设置环境变量,如QCONF_OVERRIDE
和INSTALL_ROOT_nto
,并保证没有makefile能够安装在除{{1}子目录以外的任何位置}} 例如。在Ubuntu上是否有类似的GCC机制,只需要在我的/test
文件中设置一些环境变量?我通过命令行和VIM完成所有工作,所以我不担心漂亮的IDE不理解这些环境变量的情况,因为它们不在~/.bashrc
{{1}或等同物。
谢谢。
答案 0 :(得分:5)
简短回答:不。
答案很长:
没有办法为任何Makefile设置输出目的地;必须设计Makefile或构建系统的其他部分才能使其成为可能。 make
是一个非常简单的工具,因为它旨在在各种平台上以相同的方式运行。因此,它实际上并不使用Makefile本身不存在的环境变量。这在环境污染和减少魔法方面都很好,但对实现预期目标却不利。
一些上下文:事情有点复杂,部分原因是,与QNX开发环境(基本上是同质的交叉编译环境)不同,大部分使用make的软件(我假设GNU make但是这个适用于其他版本)构建是为异构构建和运行环境编写的 - 它可能被设计为能够构建不同的发行版,操作系统(Linux,MS Windows,Mac OS X,FreeBSD等),甚至硬件架构(x86,arm,mips,power,sparc,sh等)。有时你是为同一个系统建造的,有时是为不同的系统建造的。不出所料,实际上没有一种标准方法可以在各种系统中定义安装路径。
Basile在回答中提到,对于使用GNU构建系统的程序,您可以使用./configure --prefix=/test
。这通常适用于使用Autotools的简单程序。对于使用GNU Autotools的更复杂的程序,如果有更多不同的选项,通常会出现并发症:
make install DESTDIR=/test
。./configure --help
以查看提供备用路径的其他选项(通常为--with-foo=/prefix/of/foo
)我确信我现在忘记了更多,但我认为你能够了解到这一点。
请记住,仅适用于使用Autotools的项目。其他项目可能有其他系统(可能命名一个变量或编辑配置文件),所以最好的办法是阅读项目文档,然后失败,Makefile。好玩,嗯?
P.S。在环境中定义变量与将它们作为命令参数传递给make
不同,即SPAM="alot" make target
与make target SPAM="alot"
不同 - 后者将覆盖makefile变量。请参阅Variables from the Environment上的GNU make docs。
答案 1 :(得分:2)
只需在makefile中更改前缀变量
prefix=/test
然后运行
make install
您也可以运行以下命令来安装二进制文件
make prefix=/test install
参考http://www.gnu.org/prep/standards/html_node/Directory-Variables.html
答案 2 :(得分:2)
至少对于GNU软件(使用 autotools ),你应该配置你的软件
./configure --prefix=/test
仅使用(之前没有特定的--prefix
到configure
)
make prefix=/test install
通常无法正常工作,因为某些文件是为程序构建的,因此它们的路径在其中变为常量。
您也可以使用make install DESTDIR=/tmp/dest
,然后将/tmp/dest
复制到/test
,但无法正常使用
例如,我的/usr/local/bin/emacs
二进制文件有/usr/local/share/emacs/24.3.50/lisp
作为一些字符串(使用strings /usr/local/bin/emacs
命令检查),该路径的/usr/local/
部分是configure
-d prefix。