Clo*_*oud 4 linux ubuntu gcc makefile compilation
我在一些机器上进行Linux开发,主要是Slackware 13.37和Ubuntu 12.04.我正在测试和验证一些简单的makefile的结果,并想确认输出make install.但是,在我继续测试之前,我想知道是否有一种可移植的方法来更改make install任何makefile 的默认输出目的地.
我希望如果我可以以某种方式暂存我的输出,所以所有输出都转到,例如:
/test/bin
/test/lib
/test/usr/bin
Run Code Online (Sandbox Code Playgroud)
代替:
/bin
/lib
/usr/bin
Run Code Online (Sandbox Code Playgroud)
我知道在QNX开发环境中,例如,我可以设置像QCONF_OVERRIDE和的环境变量INSTALL_ROOT_nto,并保证没有makefile能够安装在除了子目录之外的任何地方/test.在Ubuntu上是否有类似的GCC机制,只需要在我的~/.bashrc文件中设置一些环境变量?我做我通过命令行和VIM所有的工作反正,所以我并不担心,其中一个很IDE不理解这些环境变量,由于他们在一个不既然如此.kderc,.gnomerc或等同.
谢谢.
小智 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.好玩,嗯?
PS在环境中定义变量与将它们作为命令参数传递不同make,即SPAM="alot" make target不同于make target SPAM="alot"- 后者将覆盖makefile变量.请参阅环境中的变量 GNU make docs .