我希望如果我可以以某种方式暂存我的输出,所以所有输出都转到,例如:
/test/bin /test/lib /test/usr/bin
代替:
/bin /lib /usr/bin
我知道在QNX开发环境中,例如,我可以设置环境变量,如QCONF_OVERRIDE和INSTALL_ROOT_nto,并保证没有makefile能够安装在除/ test子目录之外的任何地方.在Ubuntu上是否有类似的GCC机制,只需要在我的〜/ .bashrc文件中设置一些环境变量?我通过命令行和VIM完成所有工作,所以我不担心漂亮的IDE不理解这些环境变量的情况,因为它们不在.kderc,.gnomerc或等效物中.
谢谢.
解决方法
答案很长:
没有办法为任何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的更复杂的程序,如果有更多不同的选项,通常会出现并发症:
>交叉编译?您可能希望将前缀设置为将在目标系统上安装的位置(可能是/usr/local),并使用make install DESTDIR = / test.
>您的构建系统是否期望在前缀目录中存在依赖关系,但您想在其他地方找到它们吗?更好地运行./configure –help以查看提供备用路径的其他选项(通常是–with-foo = / prefix / of / foo)
我相信我现在忘记了更多,但我认为你能得到这个.
请记住,仅适用于使用Autotools的项目.其他项目可能有其他系统(可能命名一个变量或编辑配置文件),所以最好的办法是阅读项目文档,然后失败,Makefile.好玩,嗯?
附:在环境中定义变量不同于将它们作为命令参数传递给make,即SPAM =“alot”make target与make target SPAM =“alot”不同 – 后者将覆盖makefile变量.请参阅Variables from the Environment上的GNU make docs.