qmake
生成以下(以及其他)安装目标的规则:
-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)"
我无法在INSTALL_ROOT
文件中设置*.pro
这样的内容
isEmpty(INSTALL_ROOT) {
INSTALL_ROOT=/usr
}
因为INSTALL_ROOT
在某种程度上是生成Makefile的本地。根据我到目前为止发现的内容INSTALL_ROOT
默认为空。它可以像
INSTALL_ROOT=$HOME make install
调用make时,这很好。但是,我希望能够指定默认安装根,例如/usr
。我可以按照建议here引入新变量PREFIX
。
然后生成的规则将显示为(如果PREFIX
设置为/usr
)
-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/usr/$(TARGET)"
然而
INSTALL_ROOT=$HOME make install
将目标安装到/home/<user_name>/usr/$(TARGET)
,这不是人们所期望的。
因此,将INSTALL_ROOT
设置为某个默认值会产生一致的行为,这比添加PREFIX
要好,但如何在INSTALL_ROOT
文件中设置*.pro
?
INSTALL_ROOT
的目的是什么?它应该被使用?
答案 0 :(得分:5)
INSTALL_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
以及在qmake中使用INSTALLS变量:http://doc.qt.digia.com/qt/qmake-environment-reference.html#installs - 和How do I specify input the QMake INSTALLS variable?
默认情况下,只需执行
target.path = $$[QT_INSTALL_BINS]
INSTALLS += target
然后你的二进制文件将安装在任何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
例如,其中MY_DEFAULT_INSTALL是.pro文件中定义安装默认值的位置。
答案 1 :(得分:3)
我在这里回答Windows。您似乎使用的是UNIX,Linux或Mac OS X,因此您可能需要进行一些更改。
INSTALL_ROOT是一个记录不完整的功能,似乎已添加,以便那些没有root或admin访问权限的人可以在其本地文件系统中安装Qt。它实际上有点像黑客,因为你已经看到,不可能指定任意目标,但你可以随后将文件移动到所需的位置。