Qt-qmake install相关

举报
何其不顾四月天 发表于 2021/07/20 22:48:13 2021/07/20
【摘要】 Qt-qmake install相关 简介 在之前的博文中,已经说过相关 autotools,qmake转cmake,cmake-cpack,checkinstall,linuxdeployqt ,本博文将qt 安装配置做一个简单的讲解,搭配 linuxdeployqt 来说明,qmake 安装配置。 官方说明; It is common on Unix to ...

Qt-qmake install相关

简介

在之前的博文中,已经说过相关 autotools,qmake转cmake,cmake-cpack,checkinstall,linuxdeployqt ,本博文将qt 安装配置做一个简单的讲解,搭配 linuxdeployqt 来说明,qmake 安装配置。

官方说明;

It is common on Unix to also use the build tool to install applications and libraries; for example, by invoking make install. For this reason, qmake has the concept of an install set, an object which contains instructions about the way a part of a project is to be installed.

  
 
  • 1

中文说明:

在Unix上也经常使用构建工具来安装应用程序和库;例如,通过调用make install。由于这个原因,qmake有一个安装集的概念,这个对象包含关于安装项目的一部分的说明。

  
 
  • 1

官方文档路径:INSTALL files

中文翻译路径:安装文件

DEMO

在官方文档中的相关样例如下

documentation.path = /usr/local/program/doc #安装路径
documentation.files = docs/* #安装文件
unix:documentation.extra = create_docs; mv master.doc toc.doc #额外命令
INSTALLS += documentation # 安装命令

  
 
  • 1
  • 2
  • 3
  • 4

笔者Demo:

默认已经将安装所需要的所有文件放置到Makefile同级目录

Pro工程文件

#-------------------------------------------------
#
# Project created by QtCreator 2021-01-04T09:37:29
#
#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = App
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += LINUX_OS_VERSION==$$QT_ARCH
DEFINES += QT_MESSAGELOGCONTEXT

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

message($$QT_ARCH)
message($$QT_VERSION)

contains(QT_ARCH, x86_64){ message("LINUX_OS_X86_64") DEFINES += LINUX_OS_X86_64
}else{ message("LINUX_OS_ARM64") DEFINES += LINUX_OS_ARM64
}

exists ($$PWD/../.git) { GIT_BRANCH   = $$system(git rev-parse --abbrev-ref HEAD) GIT_TIME = $$system(git show --oneline --format=\"%ci%H\" -s HEAD) APP_VERSION = "VersionInfo: $${GIT_BRANCH} : $${GIT_TIME}"
} else { APP_VERSION = None
}
DEFINES += APP_VERSION=\"\\\"$$APP_VERSION\\\"\"
message($$APP_VERSION)

INCLUDEPATH += widget

SOURCES += \ main.cpp \

HEADERS += \ FORMS += \


#LIBRARY options
QMAKE_CC += -g
QMAKE_CXX += -g
QMAKE_LINK += -g

message($$OUT_PWD)

INCLUDEPATH += $$QT_SYSROOT/usr/local/include/

LIBS += 

#只说明下属文档部分
DEFINES += INSTALL_PATH_DEAULT
INSTALL_PATH_DEAULT = /usr/local/App

contains(DEFINES, INSTALL_PATH){ message(Prefix=$$INSTALL_PATH)
}else{ DEFINES += INSTALL_PATH INSTALL_PATH = $$INSTALL_PATH_DEAULT message(default=$$INSTALL_PATH)
}

res.path=$$INSTALL_PATH/res
res.files=$$PWD/res/*

depends.path=$$INSTALL_PATH/lib
depends.files=$$OUT_PWD/lib/*

plugins.path=$$INSTALL_PATH/plugins
plugins.files=$$OUT_PWD/plugins/*

platforms.path=$$INSTALL_PATH/platforms
platforms.files=$$OUT_PWD/platforms/*

translations.path=$$INSTALL_PATH/translations
translations.files=$$OUT_PWD/translations/*

runbin.path=$$INSTALL_PATH
runbin.files=$$OUT_PWD/App

exists ($$INSTALL_PATH/doc){ documentation.path=$$INSTALL_PATH/doc documentation.files=$$OUT_PWD/doc/* INSTALLS += res runbin documentation depends plugins platforms translations
}else{ INSTALLS += res runbin depends plugins platforms translations
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107

默认工程配置相关项就不做讲解了,只讲解相关安装配置项。

配置安装路径

假设生成的目标文件为:

TARGET = App

DEFINES += INSTALL_PATH_DEAULT #定义默认安装路径
INSTALL_PATH_DEAULT = /usr/local/App #设置默认安装路径值 默认安装路径为: /usr/local/App
#如果定义了安装路径,则使用定义的安装路径,如果未定义安装路径,则采用默认安装路径
contains(DEFINES, INSTALL_PATH){ message(Prefix=$$INSTALL_PATH)
}else{ DEFINES += INSTALL_PATH INSTALL_PATH = $$INSTALL_PATH_DEAULT message(default=$$INSTALL_PATH)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

未定义安装路径:

mkdir build
cd build
qmake ../App.pro
#输出如下
Info: creating stash file /code/App/App/build/.qmake.stash
Project MESSAGE: x86_64
Project MESSAGE: 5.9.5
Project MESSAGE: LINUX_OS_X86_64
Project MESSAGE: VersionInfo: cmake-pro : 2021-07-20 16:15:47 +080048baa388f1802ac2ba23618883ceeb6dd2e68e16
Project MESSAGE: /code/rdpclient/App/build
Project MESSAGE: default=/usr/local/App

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

定义安装路径:

qmake "DEFINES += INSTALL_PATH" "INSTALL_PATH = /opt/install" ../App.pro
#输出如下
Project MESSAGE: x86_64
Project MESSAGE: 5.9.5
Project MESSAGE: LINUX_OS_X86_64
Project MESSAGE: VersionInfo: cmake-pro : 2021-07-20 16:15:47 +080048baa388f1802ac2ba23618883ceeb6dd2e68e16
Project MESSAGE: /code/App/App/build
Project MESSAGE: Prefix=/opt/install

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如上可见,INSTALL_PATH 的作用。

资源文件

资源文件夹默认在 .pro工程文件同级目录。$$PWDpro文件的当前目录

res.path=$$INSTALL_PATH/res
res.files=$$PWD/res/*

  
 
  • 1
  • 2

依赖库

depends.path=$$INSTALL_PATH/lib
depends.files=$$OUT_PWD/lib/*

  
 
  • 1
  • 2

插件

plugins.path=$$INSTALL_PATH/plugins
plugins.files=$$OUT_PWD/plugins/*

  
 
  • 1
  • 2

平台

platforms.path=$$INSTALL_PATH/platforms
platforms.files=$$OUT_PWD/platforms/* 

  
 
  • 1
  • 2

translations

translations.path=$$INSTALL_PATH/translations
translations.files=$$OUT_PWD/translations/*

  
 
  • 1
  • 2

可执行程序

runbin.path=$$INSTALL_PATH
runbin.files=$$OUT_PWD/App

  
 
  • 1
  • 2

文档

documentation.path=$$INSTALL_PATH/doc
documentation.files=$$OUT_PWD/doc/*

  
 
  • 1
  • 2

安装

INSTALLS += res runbin depends plugins platforms translations

  
 
  • 1

其他相关语法

exists

在 Demo 中,有一句这样的语法

exists ($$INSTALL_PATH/doc){ documentation.path=$$INSTALL_PATH/doc documentation.files=$$OUT_PWD/doc/* INSTALLS += res runbin documentation depends plugins platforms translations
}else{ INSTALLS += res runbin depends plugins platforms translations
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

释义为 判断 doc 文件夹是否存在,存在 执行

documentation.path=$$INSTALL_PATH/doc documentation.files=$$OUT_PWD/doc/* INSTALLS += res runbin documentation depends plugins platforms translations

不存在执行:INSTALLS += res runbin depends plugins platforms translations

平台兼容

win32{

}
unix{

}
macx{

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上述搭配使用,可以针对不同的平台,进行不同的安装配置。

宏定义相关

可以和笔者的Demo 一样,在qmake 的 时候进行宏定义,赋值等相关,来进行配置。

extra

在上述简介中有这样的一句:

unix:documentation.extra = create_docs; mv master.doc toc.doc

  
 
  • 1

释义,在 unix平台中,文档安装: 创建文档;执行 文件的命名。

如上,我们在安装对应的操作时,也可以执行对应的语法。create_touch; touch

或者 脚本执行的相关命令。根据上述猜测,可以执行 bash 语法。笔者没有测试是否执行复杂的语法或者脚本。

Demo编译

linuxdeployqt ./App -verbose=2 -appimage
mv plugins/platforms ./
checkinstall --pkgname=Appt --pkgversion=1.1.0 --pkgrelease=1 --pkglicense=GPL --pkggroup=root --maintainer=Troila --pakdir=../../deb_output -y
make uninstall

  
 
  • 1
  • 2
  • 3
  • 4

上述安装脚本中,需要搭配之前讲过的两篇文档;

linuxdeployqt-linux下Qt打包工具

checkinstall-简易打包工具

可形成一个成熟的Qt编译安装脚本。

进一步猜想

多级子工程安装

qmake INSTALLS的多个安装路径

在Qt多个工程目录,可以搭配使用。

dev包的制作

搭配 Adding Custom Targets ,增加 libxxx-dev的输出,形成一个dev安装包

注意

只允许有一个 INSTALL += 存在,在笔者的测试中,发现只允许INSTALL += 存在,准确的应该说,只有最后一个会生效。

文章来源: blog.csdn.net,作者:何其不顾四月天,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/u011218356/article/details/118941201

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。