如何使用驻留在生成的Makefile中的INSTALL_ROOT?

Beg*_*ner 7 qt qmake

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

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)"
Run Code Online (Sandbox Code Playgroud)

我不能INSTALL_ROOT*.pro文件中设置这样的东西

isEmpty(INSTALL_ROOT) {
    INSTALL_ROOT=/usr
}
Run Code Online (Sandbox Code Playgroud)

因为INSTALL_ROOT在某种程度上是生成Makefile的本地.根据我发现到目前为止INSTALL_ROOT默认是空的.它可以像

INSTALL_ROOT=$HOME make install
Run Code Online (Sandbox Code Playgroud)

在调用make时,这很好.但是,我希望能够指定默认安装根/usr.我可以PREFIX按照这里的建议引入一个新变量.然后生成的规则看起来像(如果PREFIX设置为/usr)

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/usr/$(TARGET)"
Run Code Online (Sandbox Code Playgroud)

然而

INSTALL_ROOT=$HOME make install
Run Code Online (Sandbox Code Playgroud)

安装/home/<user_name>/usr/$(TARGET)不符合预期的目标.

因此设置INSTALL_ROOT为某个默认值将产生一致的行为,这比添加更好PREFIX,但如何INSTALL_ROOT*.pro文件中设置?

INSTALL_ROOT它应该被用于什么目的是什么?

Sez*_*Sez 5

INSTALL_ROOT用于包构建系统,如NSIS,debian或任何其他方式,用于分割构建的软件并交付它.

为此您需要结果

INSTALL_ROOT=$PWD/package_root make install
Run Code Online (Sandbox Code Playgroud)

在$ PWD/package_root下创建一个完全模仿您计划交付的目标系统的树.请注意,您需要INSTALL_ROOT为完整路径(因此为$ PWD),而不是相对路径.

创建包时,可以将该树压缩为存档,然后安装过程只需将同一树解压缩到目标文件系统.

$PWD/package_root/usr/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

会安装到

/usr/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

在目标上.

这就是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
Run Code Online (Sandbox Code Playgroud)

以及在qmake中使用INSTALLS变量:http://doc.qt.digia.com/qt/qmake-environment-reference.html#installs - 如何指定输入QMake INSTALLS变量?

默认情况下,如果您这样做

target.path = $$[QT_INSTALL_BINS]
INSTALLS += target
Run Code Online (Sandbox Code Playgroud)

然后你的二进制文件将被安装在任何qt认为正确的地方,QT_INSTALL_BINS.您可以通过将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
Run Code Online (Sandbox Code Playgroud)

例如,其中MY_DEFAULT_INSTALL是.pro文件中定义安装默认值的位置.


JPa*_*get 3

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

INSTALL_ROOT 是一个记录很少的功能,似乎是为了那些没有 root 或管理员访问权限的人可以在其本地文件系统中安装 Qt 而添加的。这实际上有点像黑客,因为正如您已经看到的那样,不可能指定任意目标,但之后您始终可以将文件移动到所需位置。