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
它应该被用于什么目的是什么?
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文件中定义安装默认值的位置.
我在这里回答Windows。您似乎使用的是 UNIX、Linux 或 Mac OS X,因此您可能需要进行一些更改。
INSTALL_ROOT 是一个记录很少的功能,似乎是为了那些没有 root 或管理员访问权限的人可以在其本地文件系统中安装 Qt 而添加的。这实际上有点像黑客,因为正如您已经看到的那样,不可能指定任意目标,但之后您始终可以将文件移动到所需位置。