1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/multi-link/add_deploy.pri

322 lines
13 KiB
Plaintext
Raw Normal View History

2018-05-21 07:54:48 +08:00
#-------------------------------------------------------------
2018-05-24 21:06:03 +08:00
#add_deploy.pri
2018-05-21 07:54:48 +08:00
#提供app发布函数只是app工程使用
#-------------------------------------------------------------
2018-05-24 21:06:03 +08:00
#Multi-link技术 add_deploy部分只能应用于Qt5Qt4没有windeployqt程序如果用户为Qt4编译了windeployqt那么也可以用于Qt4。
2018-05-21 07:54:48 +08:00
################################################################################
#内部用函数
#获取命令
################################################################################
2018-05-25 20:03:31 +08:00
THIS_PRI_PWD = $${PWD}
2018-05-21 07:54:48 +08:00
2018-05-21 14:08:00 +08:00
##########################################
#app的发布函数命令
##########################################
2018-05-24 21:06:03 +08:00
defineReplace(get_add_deploy_on_mac) {
2018-05-21 07:54:48 +08:00
command += $$MK_DIR $${APP_DEPLOY_PWD} $$CMD_SEP
command += $$RM_DIR $${APP_DEPLOY_PWD}/$${TARGET}.app $$CMD_SEP
2018-05-26 09:24:11 +08:00
command += $$COPY_DIR $${APP_BUILD_PWD}/$${TARGET}.app $${APP_DEPLOY_PWD}/$${TARGET}.app
2018-05-21 07:54:48 +08:00
#message($$command)
return ($$command)
}
2018-05-26 19:43:44 +08:00
defineReplace(get_add_deploy_on_windows) {
2018-05-21 07:54:48 +08:00
#need QQT_BUILD_PWD
command =
command += $$MK_DIR $${APP_DEPLOY_PWD} $$CMD_SEP
command += $$RM $${APP_DEPLOY_PWD}\\$${TARGET}.exe $$CMD_SEP
2018-05-26 21:11:17 +08:00
command += $$COPY $${APP_BUILD_PWD}\\$${TARGET}.exe $${APP_DEPLOY_PWD}\\$${TARGET}.exe
2018-05-26 19:43:44 +08:00
#msvc 在deploy lib上有点区别mingw不发布依赖lib在编译区也能运行msvc却不能。
#在运行区都必须发布依赖lib。
#add_deploy 仅仅发布app不管依赖的lib。
2018-05-21 07:54:48 +08:00
#all windows need deploy release version?
equals(BUILD, Debug) {
2018-05-26 21:11:17 +08:00
command += $$CMD_SEP
2018-05-21 07:54:48 +08:00
#command += windeployqt $${APP_DEPLOY_PWD}\\$${TARGET}.exe --debug -verbose=1
msvc{
command += windeployqt $${APP_DEPLOY_PWD}\\$${TARGET}.exe --debug -verbose=1
} else {
command += windeployqt $${APP_DEPLOY_PWD}\\$${TARGET}.exe --release -verbose=1
}
} else: equals(BUILD, Release) {
2018-05-26 21:11:17 +08:00
command += $$CMD_SEP
2018-05-21 07:54:48 +08:00
#command += windeployqt $${APP_DEPLOY_PWD}\\$${TARGET}.exe --release -verbose=1
command += windeployqt $${APP_DEPLOY_PWD}\\$${TARGET}.exe --release -verbose=1
}
#message($$command)
return ($$command)
}
2018-05-24 21:06:03 +08:00
defineReplace(get_add_deploy_on_linux) {
2018-05-21 07:54:48 +08:00
#need QQT_BUILD_PWD
command =
command += $$MK_DIR $${APP_DEPLOY_PWD} $$CMD_SEP
command += $$RM $${APP_DEPLOY_PWD}/$${TARGET} $$CMD_SEP
2018-05-26 19:43:44 +08:00
command += $$COPY $${APP_BUILD_PWD}/$${TARGET} $${APP_DEPLOY_PWD}/$${TARGET}
2018-05-21 07:54:48 +08:00
#message($$command)
return ($$command)
}
2018-05-24 21:06:03 +08:00
defineReplace(get_add_deploy_on_android) {
2018-05-21 07:54:48 +08:00
#need QQT_BUILD_PWD
command =
command += $$MK_DIR $${APP_DEPLOY_PWD} $$CMD_SEP
command += $$RM $${APP_DEPLOY_PWD}/$${TARGET} $$CMD_SEP
2018-05-26 19:43:44 +08:00
command += $$COPY $${APP_BUILD_PWD}/$${TARGET} $${APP_DEPLOY_PWD}/$${TARGET}
2018-05-21 07:54:48 +08:00
#message($$command)
return ($$command)
}
2018-05-21 14:08:00 +08:00
##########################################
#app的发布lib函数命令
##########################################
#app发布lib到自己的目标里必须先发布app如果没有先发布app会出错。
#lib发布lib没有的事情
2018-05-24 20:03:03 +08:00
#解释从app build目录里拷贝是有原因的在Creator编译完成后我把依赖库拷贝过去了add_library()实现的。
2018-05-25 20:03:31 +08:00
defineReplace(get_add_deploy_library_on_mac) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
libname = $$1
2018-05-25 20:03:31 +08:00
librealname = $$2
isEmpty(1): error("get_add_deploy_library_on_mac(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_deploy_library_on_mac(libname, librealname) requires at most two argument")
isEmpty(2): librealname = $${libname}
2018-05-21 14:08:00 +08:00
2018-05-26 14:49:18 +08:00
#这里有个bug用户删除了SDK以后App qmake阶段读取这个SDK结果读到这个位置为0...bug其实不应该为0应该为用户设置的SDK版本号。
#解决方法一忽略第一遍编译。也就是什么SDK都没有的时候编译一遍lib生成了SDK可是不管他再qmake后编译一遍。能解决。
libmajorver = $$system(readlink $${LIB_LIB_PWD}/$${librealname}.framework/Versions/Current)
2018-05-26 14:49:18 +08:00
#这里是以防万一lib不存在 但是不能退出如果是subdirs包含Library的工程就不能退出。
2018-05-26 09:24:11 +08:00
isEmpty(libmajorver){
libmajorver=0
message($$TARGET link $$libname, unexisted lib.)
}
2018-05-21 14:08:00 +08:00
command =
2018-05-25 20:03:31 +08:00
command += $$MK_DIR $${APP_BUILD_PWD}/$${TARGET}.app/Contents/Frameworks &&
#拷贝sdk到build
command += $$COPY_DIR $${LIB_LIB_PWD}/$${librealname}.framework $${APP_BUILD_PWD}/$${TARGET}.app/Contents/Frameworks &&
2018-05-25 20:03:31 +08:00
#更改app bundle链接Lib的位置。
command += install_name_tool -change $${librealname}.framework/Versions/$${libmajorver}/$${librealname} \
@rpath/$${librealname}.framework/Versions/$${libmajorver}/$${librealname} \
2018-05-25 20:03:31 +08:00
$${APP_BUILD_PWD}/$${TARGET}.app/Contents/MacOS/$${TARGET} &&
command += macdeployqt $${APP_BUILD_PWD}/$${TARGET}.app -verbose=1 &&
lessThan(QT_MAJOR_VERSION, 5){
command += chmod +x $${THIS_PRI_PWD}/mac_deploy_qt4.sh &&
command += $${THIS_PRI_PWD}/mac_deploy_qt4.sh $${APP_BUILD_PWD}/$${TARGET}.app/Contents/MacOS/$${TARGET} &&
}
command += $$MK_DIR $${APP_DEPLOY_PWD}/$${TARGET}.app/Contents/Frameworks &&
#拷贝sdk到deploy
command += $$COPY_DIR $${LIB_LIB_PWD}/$${librealname}.framework $${APP_DEPLOY_PWD}/$${TARGET}.app/Contents/Frameworks &&
2018-05-25 20:03:31 +08:00
#更改app bundle链接Lib的位置。
command += install_name_tool -change $${librealname}.framework/Versions/$${libmajorver}/$${librealname} \
@rpath/$${librealname}.framework/Versions/$${libmajorver}/$${librealname} \
2018-05-25 20:03:31 +08:00
$${APP_DEPLOY_PWD}/$${TARGET}.app/Contents/MacOS/$${TARGET} &&
command += macdeployqt $${APP_DEPLOY_PWD}/$${TARGET}.app -verbose=1
lessThan(QT_MAJOR_VERSION, 5){
command += &&
command += chmod +x $${THIS_PRI_PWD}/mac_deploy_qt4.sh &&
command += $${THIS_PRI_PWD}/mac_deploy_qt4.sh $${APP_DEPLOY_PWD}/$${TARGET}.app/Contents/MacOS/$${TARGET}
}
2018-05-21 14:08:00 +08:00
#message($$command)
return ($$command)
}
2018-05-25 20:03:31 +08:00
defineReplace(get_add_deploy_library_on_windows) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
libname = $$1
2018-05-26 19:43:44 +08:00
librealname = $$2
isEmpty(1): error("get_add_deploy_library_on_windows(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_deploy_library_on_windows(libname, librealname) requires at most two argument")
isEmpty(2): librealname = $${libname}
2018-05-21 14:08:00 +08:00
command =
2018-05-26 19:43:44 +08:00
command += $$RM $${APP_BUILD_PWD}\\$${librealname}.* $$CMD_SEP
#拷贝sdk到build
command += $$COPY_DIR $${LIB_LIB_PWD}\\$${librealname}.* $${APP_BUILD_PWD} $$CMD_SEP
command += $$RM $${APP_DEPLOY_PWD}\\$${librealname}.* $$CMD_SEP
#拷贝sdk到deploy
2018-05-26 21:11:17 +08:00
command += $$COPY_DIR $${LIB_LIB_PWD}\\$${librealname}.* $${APP_DEPLOY_PWD}
2018-05-26 19:43:44 +08:00
2018-05-21 14:08:00 +08:00
#message($$command)
return ($$command)
}
2018-05-25 20:03:31 +08:00
defineReplace(get_add_deploy_library_on_linux) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
libname = $$1
2018-05-26 19:43:44 +08:00
librealname = $$2
isEmpty(1): error("get_add_deploy_library_on_windows(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_deploy_library_on_windows(libname, librealname) requires at most two argument")
isEmpty(2): librealname = $${libname}
2018-05-21 14:08:00 +08:00
command =
2018-05-26 19:43:44 +08:00
command += $$RM $${APP_BUILD_PWD}/lib$${libname}.so* $$CMD_SEP
command += $$COPY_DIR $${LIB_LIB_PWD}/lib$${librealname}.so* $${APP_BUILD_PWD} $$CMD_SEP
2018-05-21 14:08:00 +08:00
command += $$RM $${APP_DEPLOY_PWD}/lib$${libname}.so* $$CMD_SEP
2018-05-26 21:11:17 +08:00
command += $$COPY_DIR $${LIB_LIB_PWD}/lib$${librealname}.so* $${APP_DEPLOY_PWD}
2018-05-21 14:08:00 +08:00
#message($$command)
return ($$command)
}
2018-05-25 20:03:31 +08:00
defineReplace(get_add_deploy_library_on_android) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
libname = $$1
2018-05-26 19:43:44 +08:00
librealname = $$2
isEmpty(1): error("get_add_deploy_library_on_windows(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_deploy_library_on_windows(libname, librealname) requires at most two argument")
isEmpty(2): librealname = $${libname}
2018-05-21 14:08:00 +08:00
command =
2018-05-26 19:43:44 +08:00
command += $${LIB_LIB_PWD}/lib$${librealname}.so
2018-05-21 14:08:00 +08:00
#message($$command)
return ($$command)
}
################################################################################
#外部用函数
################################################################################
2018-05-24 21:06:03 +08:00
defineTest(add_deploy) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
2018-05-26 09:24:11 +08:00
#deploy root
isEmpty(APP_DEPLOY_ROOT){
message($${TARGET} $${CONFIG_FILE})
message(APP_DEPLOY_ROOT = /user/set/path is required, please modify .qmake/app_configure.pri )
error(please check $$CONFIG_FILE under add_multi_link_technology.pri)
}
2018-05-26 11:03:48 +08:00
message($${TARGET} is deployed to $$APP_DEPLOY_ROOT/$${TARGET}/$$QSYS_STD_DIR)
2018-05-26 09:24:11 +08:00
#起始位置 编译位置 中间目标位置
APP_DEST_PWD=$${DESTDIR}
isEmpty(APP_DEST_PWD):APP_DEST_PWD=.
APP_BUILD_PWD = $$APP_DEST_PWD
#set app deploy pwd
#APP_DEPLOY_PWD is here.
APP_DEPLOY_PWD = $${APP_DEPLOY_ROOT}/$${TARGET}/$${QSYS_STD_DIR}
#不仅仅发布目标为Windows的时候才需要改变路径
#开发机为Windows就必须改变。
#contains(QKIT_PRIVATE, WIN32||WIN64) {
equals(QMAKE_HOST.os, Windows) {
APP_DEPLOY_PWD~=s,/,\\,g
}
2018-05-24 14:43:59 +08:00
#如果 配置文件里 没有配置 APP_DEPLOY_ROOT 那么返回,不拷贝发布任何应用
#不会走到
isEmpty(APP_DEPLOY_ROOT) {
message("$${TARGET} hasn't deployed any app files")
2018-05-26 11:03:48 +08:00
return(0)
2018-05-24 14:43:59 +08:00
}
##4.8 qmake arm32 return() 函数无效
!isEmpty(APP_DEPLOY_ROOT) {
message("$${TARGET} has deployed some app files")
}
2018-05-21 14:08:00 +08:00
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
2018-05-26 19:43:44 +08:00
contains(QSYS_PRIVATE, Win32|Windows||Win64) {
2018-05-21 14:08:00 +08:00
#发布windows版本
2018-05-26 19:43:44 +08:00
QMAKE_POST_LINK += $$get_add_deploy_on_windows()
2018-05-21 14:08:00 +08:00
} else: contains(QSYS_PRIVATE, macOS) {
#发布苹果版本iOS版本也是这个
2018-05-24 21:06:03 +08:00
QMAKE_POST_LINK += $$get_add_deploy_on_mac()
2018-05-21 14:08:00 +08:00
} else: contains(QSYS_PRIVATE, Android||AndroidX86) {
2018-05-24 21:06:03 +08:00
ANDROID_EXTRA_LIBS += $$get_add_deploy_on_android()
2018-05-21 14:08:00 +08:00
} else {
#发布linux、e-linux这个是一样的。
2018-05-24 21:06:03 +08:00
QMAKE_POST_LINK += $$get_add_deploy_on_linux()
2018-05-21 14:08:00 +08:00
}
2018-05-24 21:06:03 +08:00
export(QMAKE_POST_LINK)
2018-05-21 14:08:00 +08:00
return (1)
}
2018-05-25 20:03:31 +08:00
defineTest(add_deploy_library) {
2018-05-21 14:08:00 +08:00
#APP_DEPLOY_PWD
#APP_DEST_PWD
2018-05-22 14:38:26 +08:00
2018-05-26 09:24:11 +08:00
#deploy root
isEmpty(APP_DEPLOY_ROOT){
message($${TARGET} $${CONFIG_FILE})
message(APP_DEPLOY_ROOT = /user/set/path is required, please modify .qmake/app_configure.pri )
error(please check $$CONFIG_FILE under add_multi_link_technology.pri)
}
message(Deploy $${TARGET} to $$APP_DEPLOY_ROOT/$${TARGET}/$$QSYS_STD_DIR)
isEmpty(LIB_SDK_ROOT){
message($${TARGET} $${CONFIG_FILE})
message(LIB_SDK_ROOT = /user/set/path is required, please modify .qmake/app_configure.pri )
error(please check $$CONFIG_FILE under add_multi_link_technology.pri)
}
#起始位置 编译位置 中间目标位置
APP_DEST_PWD=$${DESTDIR}
isEmpty(APP_DEST_PWD):APP_DEST_PWD=.
APP_BUILD_PWD = $$APP_DEST_PWD
#set app deploy pwd
#APP_DEPLOY_PWD is here.
APP_DEPLOY_PWD = $${APP_DEPLOY_ROOT}/$${TARGET}/$${QSYS_STD_DIR}
#不仅仅发布目标为Windows的时候才需要改变路径
#开发机为Windows就必须改变。
#contains(QKIT_PRIVATE, WIN32||WIN64) {
equals(QMAKE_HOST.os, Windows) {
APP_DEPLOY_PWD~=s,/,\\,g
}
2018-05-21 14:08:00 +08:00
libname = $$1
2018-05-25 20:03:31 +08:00
librealname = $$2
isEmpty(1): error("add_deploy_library(libname, librealname) requires at last one argument")
!isEmpty(3): error("add_deploy_library(libname, librealname) requires at most two argument")
isEmpty(2): librealname = $${libname}
2018-05-22 14:38:26 +08:00
2018-05-25 20:03:31 +08:00
LIB_STD_DIR = $${libname}/$${QSYS_STD_DIR}
LIB_SDK_PWD = $${LIB_SDK_ROOT}/$${LIB_STD_DIR}
LIB_LIB_PWD = $${LIB_SDK_PWD}/lib
2018-05-26 19:43:44 +08:00
equals(QMAKE_HOST.os, Windows) {
LIB_LIB_PWD~=s,/,\\,g
}
2018-05-21 14:08:00 +08:00
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
2018-05-26 19:43:44 +08:00
contains(QSYS_PRIVATE, Win32|Windows||Win64) {
2018-05-21 14:08:00 +08:00
#发布windows版本
2018-05-26 19:43:44 +08:00
QMAKE_POST_LINK += $$get_add_deploy_library_on_windows($${libname})
2018-05-21 14:08:00 +08:00
} else: contains(QSYS_PRIVATE, macOS) {
#发布苹果版本iOS版本也是这个
2018-05-25 20:03:31 +08:00
QMAKE_POST_LINK += $$get_add_deploy_library_on_mac($${libname})
2018-05-21 14:08:00 +08:00
} else: contains(QSYS_PRIVATE, Android||AndroidX86) {
2018-05-25 20:03:31 +08:00
ANDROID_EXTRA_LIBS += $$get_add_deploy_library_on_android($${libname})
2018-05-21 14:08:00 +08:00
} else {
#发布linux、e-linux这个是一样的。
2018-05-25 20:03:31 +08:00
QMAKE_POST_LINK += $$get_add_deploy_library_on_linux($${libname})
2018-05-21 14:08:00 +08:00
}
2018-05-24 21:06:03 +08:00
export(QMAKE_POST_LINK)
2018-05-25 20:03:31 +08:00
message("$${TARGET} has deployed lib $${libname}.")
2018-05-21 14:08:00 +08:00
return (1)
}
2018-05-22 14:38:26 +08:00
#判断某个lib是否已经发布
#避免二次发布,拷贝浪费时间。
defineTest(has_deployed_lib) {
return(0)
}