Qt 如何使用生成的makefile中的INSTALL\u根目录?

Qt 如何使用生成的makefile中的INSTALL\u根目录?,qt,qmake,Qt,Qmake,qmake为安装目标生成以下(以及其他)规则: -$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)" 我无法在*.pro文件中设置INSTALL\u ROOT isEmpty(INSTALL_ROOT) { INSTALL_ROOT=/usr } 因为INSTALL\u ROOT对于生成的makefile来说是本地的。根据我目前发现的情况,INSTALL\u ROOT默认为空。它可以像这样使用 INSTALL_ROOT

qmake
为安装目标生成以下(以及其他)规则:

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)"
我无法在
*.pro
文件中设置
INSTALL\u ROOT

isEmpty(INSTALL_ROOT) {
    INSTALL_ROOT=/usr
}
因为
INSTALL\u ROOT
对于生成的makefile来说是本地的。根据我目前发现的情况,
INSTALL\u ROOT
默认为空。它可以像这样使用

INSTALL_ROOT=$HOME make install
调用make时,这很好。但是,我希望能够指定默认的安装根目录,比如说
/usr
。我可以按照建议引入一个新变量
前缀
。 然后生成的规则将如下所示(如果
前缀
设置为
/usr

然而

INSTALL_ROOT=$HOME make install
将目标安装到
/home//usr/$(target)
,这不是人们所期望的

因此,将
INSTALL\u ROOT
设置为某个默认值将产生一致的行为,这优于添加
前缀
,但是如何在
*.pro
文件中设置
INSTALL\u ROOT


INSTALL\u ROOT
的目的是什么?应该使用它吗?

我在这里回答Windows的问题。您似乎正在使用UNIX、Linux或Mac OS X,因此可能需要进行一些更改


INSTALL_ROOT是一个文档不完整的功能,它似乎是为了让那些没有ROOT或admin访问权限的用户可以在本地文件系统中安装Qt而添加的。这实际上是一种黑客行为,因为正如您已经看到的,不可能指定任意目标,但您始终可以在以后将文件移动到所需的位置。

INSTALL\u ROOT用于包构建系统,如NSIS、debian,或用于打包和交付构建软件的任何其他方式

为此,您希望得到以下结果:

INSTALL_ROOT=$PWD/package_root make install
在$PWD/package_root下创建一个树,它完全模仿您计划交付给的目标系统上的树。请注意,INSTALL_ROOT必须是完整路径(因此是$PWD),而不是相对路径

当您创建包时,您可以将该树压缩到存档中,然后您的安装过程只需将相同的树解压缩到目标文件系统

$PWD/package_root/usr/bin/my_binary
将安装到

/usr/bin/my_binary
瞄准目标

这就是问题的答案,INSTALL_ROOT是用来做什么的。要回答如何指定“默认安装根目录”,需要了解有关您想要实现的目标的更多信息

查看qmake-query的输出:

sez@ubuntu-11.10:~$ qmake -query
QT_INSTALL_PREFIX:/usr
QT_INSTALL_DATA:/usr/share/qt4
QT_INSTALL_DOCS:/usr/share/qt4/doc
QT_INSTALL_HEADERS:/usr/include/qt4
QT_INSTALL_LIBS:/usr/lib/i386-linux-gnu
QT_INSTALL_BINS:/usr/bin
<snipped>
QT_VERSION:4.7.4
然后你的二进制文件将被安装在qt认为合适的地方,qt_安装箱。当然,您可以通过将target.path设置为其他内容来更改这些默认值。Qt提供了这些路径,但使用与否取决于您

你可以

MY_DEFAULT_INSTALL=/opt/myproj

somedocs.files = docs/index.html
somedocs.path = $$MY_DEFAULT_INSTALL/docs

target.path = $$MY_DEFAULT_INSTALL/bin

INSTALLS += somedocs target
例如,MY_DEFAULT_INSTALL是.pro文件中定义默认安装的位置

target.path = $$[QT_INSTALL_BINS]
INSTALLS += target
MY_DEFAULT_INSTALL=/opt/myproj

somedocs.files = docs/index.html
somedocs.path = $$MY_DEFAULT_INSTALL/docs

target.path = $$MY_DEFAULT_INSTALL/bin

INSTALLS += somedocs target