1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/multi-link/add_sdk.pri
2018-06-02 08:26:54 +08:00

712 lines
25 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

################################################
##add_sdk.pri, making sdk function
##install to SDK path
##把Library按照SDK格式安装到LIB_SDK_ROOT
##发布到sdk是为Multi link准备的。
##依赖add_version.pri
##please don't modify this pri
################################################
THIS_PRI_PWD = $${PWD}
#在build path修复app (macOS专有)
#copy lib
#fix bundle路径链接
#不修复,直接拷贝,所有的快捷方式会丢失,变成实体
#直接在framework内部强制修复
defineReplace(get_add_mac_sdk_fix_building_framework_2) {
APP_DEST_DIR=$${DESTDIR}
isEmpty(APP_DEST_DIR):APP_DEST_DIR=.
libname = $$TARGET_PRIVATE
librealname = $$TARGET
libtempname = $${libname}_Temp
liblowername = $$lower($${librealname})
command =
command += chmod +x $${THIS_PRI_PWD}/linux_cur_path.sh &&
command += . $${THIS_PRI_PWD}/linux_cur_path.sh &&
#copy temp
command += $$COPY_DIR $${APP_DEST_DIR}/$${libname}.framework $${APP_DEST_DIR}/$${libtempname}.framework &&
#进去原先的
command += cd $${APP_DEST_DIR}/$${libname}.framework &&
#修复framework里的快捷方式 从libtempname里拷贝资源修复原先的
#need APP_BUILD_PWD
create_command = $$get_add_mac_sdk($${libtempname}, $${librealname})
command += $${create_command} &&
command += chmod +x $${THIS_PRI_PWD}/linux_cd_path.sh &&
command += . $${THIS_PRI_PWD}/linux_cd_path.sh &&
#remove 临时的 framework
command += $$RM_DIR $${APP_DEST_DIR}/$${libtempname}.framework
#message($$command)
return ($${command})
}
#拷贝temp进行修复。
defineReplace(get_add_mac_sdk_fix_building_framework) {
APP_DEST_DIR=$${DESTDIR}
isEmpty(APP_DEST_DIR):APP_DEST_DIR=.
libname = $$TARGET
librealname = $$TARGET
libtempname = $${libname}_temp
liblowername = $$lower($${librealname})
command =
command += chmod +x $${THIS_PRI_PWD}/linux_cur_path.sh &&
command += . $${THIS_PRI_PWD}/linux_cur_path.sh &&
#create temp
command += $$MK_DIR $${APP_DEST_DIR}/$${libtempname}.framework &&
#进去
command += cd $${APP_DEST_DIR}/$${libtempname}.framework &&
#修复framework里的快捷方式
#need APP_BUILD_PWD
create_command = $$get_add_mac_sdk($${libname}, $${librealname})
command += $${create_command} &&
command += chmod +x $${THIS_PRI_PWD}/linux_cd_path.sh &&
command += . $${THIS_PRI_PWD}/linux_cd_path.sh &&
#拷贝prl到新的里
command += $$COPY $${APP_DEST_DIR}/$${libname}.framework/$${librealname}.prl $${APP_DEST_DIR}/$${libtempname}.framework/$${librealname}.prl $$CMD_SEP
#del 原先的
command += $$RM_DIR $${APP_DEST_DIR}/$${libname}.framework &&
#rename 临时的 framework 到原先的
command += $$MOVE $${APP_DEST_DIR}/$${libtempname}.framework $${APP_DEST_DIR}/$${libname}.framework
#message($$command)
return ($${command})
}
################################################
##lib install functions
##variable can be private and default inherit
##内部实现
################################################
defineReplace(get_add_sdk_dir_struct) {
#if it's qt library, don't create
command =
!equals(LIB_SDK_PWD , $$[QT_INSTALL_DATA]){
!contains(QSYS_PRIVATE, macOS) {
command += $$MK_DIR $$LIB_INC_DIR $$CMD_SEP
}
command += $$MK_DIR $$LIB_BIN_DIR $$CMD_SEP
command += $$MK_DIR $$LIB_LIB_DIR $$CMD_SEP
command += $$MK_DIR $$LIB_CMAKE_DIR $$CMD_SEP
command += $$MK_DIR $$LIB_PRI_PATH
}
return ($$command)
}
defineReplace(get_add_windows_sdk) {
#need cd sdk root
command =
#copy header
command += $${COPY_DIR} $${LIB_SRC_PWD}\\*.h* $${LIB_INC_DIR} $$CMD_SEP
#should be *.dll *.lib
command += $${COPY_DIR} $${LIB_BUILD_PWD}\\* $${LIB_LIB_DIR} $$CMD_SEP
#move *.dll
command += $${MOVE} $${LIB_LIB_DIR}\\*.dll $${LIB_BIN_DIR}
return ($$command)
}
defineReplace(get_add_linux_sdk) {
#need cd sdk root
copy_command = $$get_copy_dir_and_file($${LIB_SRC_PWD}, "*.h*", $${LIB_INC_DIR})
command =
command += $${copy_command} $$CMD_SEP
#should be *.so.* *.a
command += $$COPY_DIR $${LIB_BUILD_PWD}/* $${LIB_LIB_DIR}
return ($$command)
}
#理论上只要用户设置了Version就能读到Version Major
#add_version里面有初始化版本号所以用户什么都不设置将会是0版本号。
#从libname.framework拷贝到当前新建的framework 内部为librealname
defineReplace(get_add_mac_sdk){
#need cd framework root
#LIB_BUILD_PWD libname libmajorver
libname = $$1
librealname = $$2
libmajorver = $$3
#isEmpty(1): error("get_add_mac_sdk(libname, librealname, libmajorver) requires at last one argument")
!isEmpty(4): error("get_add_mac_sdk(libname, librealname, libmajorver) requires at most three argument")
isEmpty(1):libname = $$TARGET_PRIVATE
isEmpty(2):librealname = $${libname}
isEmpty(3):libmajorver = $$VER_MAJ
isEmpty(libmajorver){
error(Have you modifyed add_version.pri, please dont modify it.)
}
#这里的isEmpty没有用。
#isEmpty(libmajorver):libmajorver = $$system(readlink $${LIB_BUILD_PWD}/$${libname}.framework/Versions/Current)
#message($${LIB_BUILD_PWD}/$${libname}.framework/Versions/Current $$TARGET major version $$libmajorver)
LIB_BUNDLE_VER_DIR = Versions/$${libmajorver}
LIB_BUNDLE_CUR_DIR = Versions/Current
LIB_BUNDLE_INC_DIR = $${LIB_BUNDLE_VER_DIR}/Headers
LIB_BUNDLE_RES_DIR = $${LIB_BUNDLE_VER_DIR}/Resources
LIB_BUNDLE_EXE_FILE = $${LIB_BUNDLE_VER_DIR}/$${librealname}
LIB_BUNDLE_CUR_INC_DIR = $${LIB_BUNDLE_CUR_DIR}/Headers
LIB_BUNDLE_CUR_RES_DIR = $${LIB_BUNDLE_CUR_DIR}/Resources
LIB_BUNDLE_CUR_EXE_FILE = $${LIB_BUNDLE_CUR_DIR}/$${librealname}
LIB_BUNDLE_CUR_LINK = Current
LIB_BUNDLE_INC_LINK = Headers
LIB_BUNDLE_RES_LINK = Resources
LIB_BUNDLE_EXE_LINK = $${librealname}
command =
command += $$MK_DIR $$LIB_BUNDLE_VER_DIR $$CMD_SEP
command += $$MK_DIR $$LIB_BUNDLE_INC_DIR $$CMD_SEP
#copy lib
#should be *
command += $$COPY_DIR $${LIB_BUILD_PWD}/$${libname}.framework/$${LIB_BUNDLE_VER_DIR}/* $$LIB_BUNDLE_VER_DIR $$CMD_SEP
#copy header
copy_command = $$get_copy_dir_and_file($${LIB_SRC_PWD}, "*.h*", $${LIB_BUNDLE_INC_DIR})
command += $${copy_command} $$CMD_SEP
#link header current resources
command += $$CD Versions $$CMD_SEP
command += $$LN $${libmajorver} $${LIB_BUNDLE_CUR_LINK} $$CMD_SEP
command += $$CD .. $$CMD_SEP
command += $$LN $$LIB_BUNDLE_CUR_INC_DIR $${LIB_BUNDLE_INC_LINK} $$CMD_SEP
command += $$LN $$LIB_BUNDLE_CUR_RES_DIR $${LIB_BUNDLE_RES_LINK} $$CMD_SEP
command += $$LN $$LIB_BUNDLE_CUR_EXE_FILE $${LIB_BUNDLE_EXE_LINK}
lessThan(QT_MAJOR_VERSION, 5){
command += $$CMD_SEP
command += chmod +x $${THIS_PRI_PWD}/mac_deploy_qt4.sh $$CMD_SEP
command += $${THIS_PRI_PWD}/mac_deploy_qt4.sh $${LIB_BUNDLE_VER_DIR}/$${libname}
}
return ($$command)
}
#这个函数是支持发布Qt Library用的add_sdk用到了。
defineReplace(get_add_Qt_lib_pri){
#need cd sdk root
#LIB_BASE_DIR libname LIB_VERSION MODULE_CNAME
##write qt_lib_qqtcore.pri
command =
command += $$get_empty_file($${LIB_PRI_FILEPATH}) $$CMD_SEP
command += echo "QT.$${liblowername}.VERSION = $${APP_VERSION}" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.name = $${libname}" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.module = $${libname}" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
contains(QSYS_PRIVATE, Win32|Windows|Win64) {
command += echo "QT.$${liblowername}.libs = \$$QT_MODULE_LIB_BASE" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.bins = \$$QT_MODULE_BIN_BASE" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
} else {
command += echo "QT.$${liblowername}.libs = '\$$QT_MODULE_LIB_BASE'" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.bins = '\$$QT_MODULE_BIN_BASE'" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
}
contains(QSYS_PRIVATE, Win32|Windows|Win64) {
command += echo "QT.$${liblowername}.includes = \$$QT_MODULE_INCLUDE_BASE \$$QT_MODULE_INCLUDE_BASE/$${libname}" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.frameworks = " >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.module_config = v2 " >> $${LIB_PRI_FILEPATH} $$CMD_SEP
}else:equals(QSYS_PRIVATE, macOS) {
command += echo "QT.$${liblowername}.includes = '\$$QT_MODULE_LIB_BASE/$${libname}.framework/Headers'" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.frameworks = '\$$QT_MODULE_LIB_BASE'" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.module_config = v2 lib_bundle" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
} else {
command += echo "QT.$${liblowername}.includes = '\$$QT_MODULE_INCLUDE_BASE \$$QT_MODULE_INCLUDE_BASE/$${libname}'" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.frameworks = " >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.module_config = v2 " >> $${LIB_PRI_FILEPATH} $$CMD_SEP
}
greaterThan(QT_MAJOR_VERSION, 4):{
command += echo "QT.$${liblowername}.depends = core sql network gui xml widgets" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
} else {
command += echo "QT.$${liblowername}.depends = core sql network gui xml" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
}
command += echo "QT.$${liblowername}.uses =" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.DEFINES = LIB_LIBRARY" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.enabled_features =" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT.$${liblowername}.disabled_features =" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT_CONFIG +=" >> $${LIB_PRI_FILEPATH} $$CMD_SEP
command += echo "QT_MODULES += $${liblowername}" >> $${LIB_PRI_FILEPATH}
return ($$command)
}
################################################
##Lib deploy sdk workflow
##SDK发布过程
################################################
defineReplace(get_add_sdk_work_flow){
#need cd sdk root
libname = $$1
librealname = $$2
#isEmpty(1): error("get_add_mac_sdk(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_mac_sdk(libname, librealname) requires at most two argument")
isEmpty(1):libname = $$TARGET_PRIVATE
isEmpty(2): librealname = $${libname}
liblowername = $$lower($${librealname})
command =
contains(QSYS_PRIVATE, macOS) {
#在编译路径里创作一次sdk完成framework链接等的修复工作
command += $$get_add_mac_sdk_fix_building_framework() $$CMD_SEP
#command += echo $$libname fix framework success. $$CMD_SEP
}
#command += $$RM_DIR $${LIB_SDK_PWD} $$CMD_SEP
command += $$MK_DIR $${LIB_SDK_PWD} $$CMD_SEP
command += $$CD $${LIB_SDK_PWD} $$CMD_SEP
command += $$get_add_sdk_dir_struct() $$CMD_SEP
#这里不是目标为Windows才拷贝而是开发机是Windows就得这么拷贝。
#Windows下Win目标、Android目标都走这里。
#contains(QSYS_PRIVATE, Win32|Windows|Win64) {
equals(QMAKE_HOST.os, Windows) {
#message(create lib windows struct library)
command += $$get_add_windows_sdk() $$CMD_SEP
command += $$COPY $${LIB_BUILD_PWD}\\*.prl lib $$CMD_SEP
} else {
#macOS lib_bundle make sdk
contains(QSYS_PRIVATE, macOS):contains(CONFIG, lib_bundle) {
#message(create lib mac bundle framework)
command += $$MK_DIR lib/$${libname}.framework $$CMD_SEP
command += $$CD lib/$${libname}.framework $$CMD_SEP
command += $$get_add_mac_sdk($${librealname}, $${librealname}) $$CMD_SEP
command += $$CD ../../ $$CMD_SEP
#create prl
command += $$COPY $${LIB_BUILD_PWD}/$${librealname}.framework/$${librealname}.prl lib/$${libname}.framework/$${librealname}.prl $$CMD_SEP
} else {
#Android在linux开发机下也会走这里Android目标Lib可以发布Win和Linux两种格式的SDK。
#message(create lib linux struct library)
#macOS no bundle 也会走这里。
command += $$get_add_linux_sdk() $$CMD_SEP
command += $$COPY $${LIB_BUILD_PWD}/*.prl lib $$CMD_SEP
}
}
command += $$get_add_Qt_lib_pri()
#$$CMD_SEP
#command += echo $$libname create sdk success.
return ($$command)
}
################################################
##Lib deploy sdk work flow
##初始化SDK发布过程需要的变量
################################################
defineReplace(get_add_sdk_private){
libname = $$1
librealname = $$2
#isEmpty(1): error("get_add_mac_sdk(libname, librealname) requires at last one argument")
!isEmpty(3): error("get_add_mac_sdk(libname, librealname) requires at most two argument")
isEmpty(1):libname = $$TARGET_PRIVATE
isEmpty(2): librealname = $${libname}
liblowername = $$lower($${librealname})
#qqt defined these dir struct, used from qt library
LIB_INC_DIR = include/$${TARGET_PRIVATE}
LIB_BIN_DIR = bin
LIB_LIB_DIR = lib
LIB_CMAKE_DIR=lib/cmake/$${libname}
LIB_PRI_PATH=mkspecs/modules
LIB_PRI_FILEPATH=$${LIB_PRI_PATH}/qt_lib_$${liblowername}.pri
#不仅仅发布目标为Windows的时候需要改变
#开发Host是Windows的时候都要改变。路径问题是两种操作系统固有的痛。
#contains(QSYS_PRIVATE, Win32|Windows|Win64) {
equals(QMAKE_HOST.os, Windows) {
#on windows every path must use \ sep.
LIB_SRC_PWD~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
LIB_INC_DIR~=s,/,\\,g
LIB_BIN_DIR = bin
LIB_LIB_DIR = lib
LIB_CMAKE_DIR~=s,/,\\,g
LIB_PRI_PATH~=s,/,\\,g
LIB_PRI_FILEPATH~=s,/,\\,g
#ignored
HEADERS_WIN=$${HEADERS}
HEADERS_WIN~=s,/,\\,g
#on windows, copy all *.h*, include closed feature header.
#qmake regexp use perl grammer
#HEADERS_WIN~=s/[d ]+/h+/g how to mod space to +
}
#create library struct
#create platform sdk
#create mkspec module pri
command = $$get_add_sdk_work_flow($${libname}, $${librealname})
#message ($$command)
return ($${command})
}
################################################
##用户调用的函数
################################################
#依赖 libname libsrcdir libdstdir
defineTest(add_sdk){
#isEmpty(1):error(add_sdk(libname, libsrcdir, libdstdir) need at last one argument)
contains(QSYS_PRIVATE, macOS) {
#equals(APP_MAJOR_VERSION, 0):message(add_sdk(libname, libsrcdir, libdstdir) macos app major version is "0," have you setted it?)
}
libname = $$TARGET_PRIVATE
librealname = $$1
isEmpty(1):librealname = $$TARGET
liblowername = $$lower($${librealname})
#LIB std dir is not same to app std dir
LIB_STD_DIR = $${TARGET_PRIVATE}/$${QSYS_STD_DIR}
#create platform sdk need this
#源代码目录
LIB_SRC_PWD=$$2
isEmpty(2):LIB_SRC_PWD=$${PWD}
#编译目标位置
LIB_DST_DIR=$$DESTDIR
!isEmpty(3):LIB_DST_DIR = $$3
#need use qqt subdir proj
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${LIB_STD_DIR}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
#sdk path
LIB_SDK_PWD = $${LIB_SDK_ROOT}/$${LIB_STD_DIR}
#message(QQt sdk install here:$${LIB_SDK_PWD})
#这里不仅仅目标为windows的时候才会转换
#开发Host为Windows的时候都要转换。
#contains(QSYS_PRIVATE, Win32|Windows||Win64) {
equals(QMAKE_HOST.os, Windows) {
APP_BUILD_ROOT~=s,/,\\,g
LIB_SDK_ROOT~=s,/,\\,g
APP_DEPLOY_ROOT~=s,/,\\,g
QSYS_STD_DIR~=s,/,\\,g
LIB_STD_DIR~=s,/,\\,g
LIB_DST_DIR~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
}
command += $$get_add_sdk_private($${libname}, $${librealname})
#message($$command)
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
QMAKE_POST_LINK += $$command
export(QMAKE_POST_LINK)
return (1)
}
#依赖 libname libsrcdir libdstdir
#添加一个参数 subdirs列表 包含subdirs层 子文件夹层 说的是build路径比较深的情况
#TARGET
#PWD
#DESTDIR
#sub层列表 从头到尾 如果为空则等于add_sdk()
#支持Qt5不支持Qt4. Qt4 qmake比较落后。
defineTest(add_sdk_from_subdirs){
#isEmpty(1):error(add_subdir_sdk(libname, libsrcdir, libdstdir) need at last one argument)
contains(QSYS_PRIVATE, macOS) {
#equals(APP_MAJOR_VERSION, 0):message(add_sdk(libname, libsrcdir, libdstdir) macos app major version is "0," have you setted it?)
}
libname = $$TARGET_PRIVATE
librealname = $$1
isEmpty(1):librealname = $$TARGET
liblowername = $$lower($${librealname})
#LIB std dir is not same to app std dir
LIB_STD_DIR = $${TARGET_PRIVATE}/$${QSYS_STD_DIR}
#create platform sdk need this
#源代码目录
LIB_SRC_PWD=$$2
isEmpty(2):LIB_SRC_PWD=$${PWD}
#编译目标相对位置
LIB_DST_DIR=$$3
isEmpty(3):LIB_DST_DIR = $$DESTDIR
#编译目录的完全位置
LIB_BUILD_PWD=
isEmpty(4){
#add sdk level
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${LIB_STD_DIR}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
} else {
#sub dir level
LIB_SUBDIR_LIST=$$4
first_value = $$first(LIB_SUBDIR_LIST)
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${first_value}/$${QSYS_STD_DIR}
LIB_SUBDIR_LIST -= $$first_value
for(dir, LIB_SUBDIR_LIST) {
LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${dir}
}
LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${TARGET}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
}
#sdk path
LIB_SDK_PWD = $${LIB_SDK_ROOT}/$${LIB_STD_DIR}
#message($${TARGET} sdk install here:$${LIB_SDK_PWD})
#这里不仅仅目标为windows的时候才会转换
#开发Host为Windows的时候都要转换。
#contains(QSYS_PRIVATE, Win32|Windows||Win64) {
equals(QMAKE_HOST.os, Windows) {
APP_BUILD_ROOT~=s,/,\\,g
LIB_SDK_ROOT~=s,/,\\,g
APP_DEPLOY_ROOT~=s,/,\\,g
QSYS_STD_DIR~=s,/,\\,g
LIB_STD_DIR~=s,/,\\,g
LIB_DST_DIR~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
}
command += $$get_add_sdk_private($${libname}, $${librealname})
#message($$command)
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
QMAKE_POST_LINK += $$command
export(QMAKE_POST_LINK)
return (1)
}
#if you want to use QQt with QT += QQt please open this feature
defineTest(add_sdk_to_Qt){
#isEmpty(1):error(add_sdk_to_Qt(libname, libsrcdir, libdstdir) need at last one argument)
contains(QSYS_PRIVATE, macOS) {
#equals(APP_MAJOR_VERSION, 0):message(add_sdk(libname, libsrcdir, libdstdir) macos app major version is "0," have you setted it?)
}
libname = $$TARGET_PRIVATE
librealname = $$1
isEmpty(1):librealname = $$TARGET
liblowername = $$lower($${librealname})
#LIB std dir is not same to app std dir
LIB_STD_DIR = $${TARGET_PRIVATE}/$${QSYS_STD_DIR}
#create platform sdk need this
#源代码目录
LIB_SRC_PWD=$$2
isEmpty(2):LIB_SRC_PWD=$${PWD}
#编译目标位置
LIB_DST_DIR=$$DESTDIR
!isEmpty(3):LIB_DST_DIR = $$3
#need use qqt subdir proj
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${LIB_STD_DIR}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
#sdk path
LIB_SDK_PWD = $$[QT_INSTALL_DATA]
#message(QQt sdk install here:$${LIB_SDK_PWD})
#这里不仅仅目标为windows的时候才会转换
#开发Host为Windows的时候都要转换。
#contains(QSYS_PRIVATE, Win32|Windows||Win64) {
equals(QMAKE_HOST.os, Windows) {
APP_BUILD_ROOT~=s,/,\\,g
LIB_SDK_ROOT~=s,/,\\,g
APP_DEPLOY_ROOT~=s,/,\\,g
QSYS_STD_DIR~=s,/,\\,g
LIB_STD_DIR~=s,/,\\,g
LIB_DST_DIR~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
}
command += $$get_add_sdk_private($${libname}, $${librealname})
#message($$command)
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
QMAKE_POST_LINK += $$command
export(QMAKE_POST_LINK)
return (1)
}
defineTest(del_sdk){
#isEmpty(1):error(del_sdk(libname, libsrcdir, libdstdir) need at last one argument)
contains(QSYS_PRIVATE, macOS) {
#equals(APP_MAJOR_VERSION, 0):message(add_sdk(libname, libsrcdir, libdstdir) macos app major version is "0," have you setted it?)
}
libname = $$1
isEmpty(1):libname = $$TARGET
liblowername = $$lower($${libname})
#LIB std dir is not same to app std dir
LIB_STD_DIR = $${TARGET_PRIVATE}/$${QSYS_STD_DIR}
#create platform sdk need this
#源代码目录
LIB_SRC_PWD=$$2
isEmpty(2):LIB_SRC_PWD=$${PWD}
#编译目标位置
LIB_DST_DIR=$$DESTDIR
!isEmpty(3):LIB_DST_DIR = $$3
#need use qqt subdir proj
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${LIB_STD_DIR}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
#sdk path
LIB_SDK_PWD = $${LIB_SDK_ROOT}/$${LIB_STD_DIR}
#message(QQt sdk install here:$${LIB_SDK_PWD})
LIB_SDK_ALL = $${LIB_SDK_PWD}/*
#这里不仅仅目标为windows的时候才会转换
#开发Host为Windows的时候都要转换。
#contains(QSYS_PRIVATE, Win32|Windows||Win64) {
equals(QMAKE_HOST.os, Windows) {
APP_BUILD_ROOT~=s,/,\\,g
LIB_SDK_ROOT~=s,/,\\,g
APP_DEPLOY_ROOT~=s,/,\\,g
QSYS_STD_DIR~=s,/,\\,g
LIB_STD_DIR~=s,/,\\,g
LIB_DST_DIR~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
LIB_SDK_ALL~=s,/,\\,g
}
command += $$RM_DIR $${LIB_SDK_ALL}
#message($$command)
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += $$CMD_SEP
QMAKE_POST_LINK += $$command
export(QMAKE_POST_LINK)
return (1)
}
#获取sdk name
#修饰TARGET _d _debug
defineReplace(add_sdk_name){
#isEmpty(1):error(add_sdk_name(target_name) need one argument)
target_name = $$1
isEmpty(1):target_name = $$TARGET
ret = $${target_name}
contains(BUILD, Debug) {
mac:ret = $${ret}_debug
win32:ret = $${ret}d
}
return ($$ret)
}
#发布没有后缀名的头文件
#类名
#头文件 不设置 为空 则为类名小写。
#保存位置 相对路径 不写则为根目录。
defineTest(add_sdk_header){
isEmpty(1):error(add_sdk_header(classname, headername, headerdir) need at last one argument)
classname = $$1
headername = $$2
headerdir = $$3
isEmpty(2):headername = $$lower($${classname}).h
#LIB std dir is not same to app std dir
LIB_STD_DIR = $${TARGET_PRIVATE}/$${QSYS_STD_DIR}
#create platform sdk need this
#源代码目录
LIB_SRC_PWD=$$2
isEmpty(2):LIB_SRC_PWD=$${PWD}
#编译目标位置
LIB_DST_DIR=$$DESTDIR
!isEmpty(3):LIB_DST_DIR = $$3
#need use qqt subdir proj
LIB_BUILD_PWD=$${APP_BUILD_ROOT}/$${LIB_STD_DIR}
!isEmpty(LIB_DST_DIR):LIB_BUILD_PWD=$${LIB_BUILD_PWD}/$${LIB_DST_DIR}
#sdk path
LIB_SDK_PWD = $${LIB_SDK_ROOT}/$${LIB_STD_DIR}
#message(QQt sdk install here:$${LIB_SDK_PWD})
LIB_INC_DIR = include/$${TARGET_PRIVATE}
contains(QMAKE_HOST.os, Darwin){
contains(CONFIG, lib_bundle) {
LIB_INC_DIR = lib/$${TARGET_PRIVATE}.framework/Headers
}
}
!isEmpty(3):headerdir=$${headerdir}/
HEADER_FILE = $${headerdir}$${classname}
#这里不仅仅目标为windows的时候才会转换
#开发Host为Windows的时候都要转换。
#contains(QSYS_PRIVATE, Win32|Windows||Win64) {
equals(QMAKE_HOST.os, Windows) {
APP_BUILD_ROOT~=s,/,\\,g
LIB_SDK_ROOT~=s,/,\\,g
APP_DEPLOY_ROOT~=s,/,\\,g
QSYS_STD_DIR~=s,/,\\,g
LIB_STD_DIR~=s,/,\\,g
LIB_DST_DIR~=s,/,\\,g
LIB_BUILD_PWD~=s,/,\\,g
LIB_SDK_PWD~=s,/,\\,g
LIB_INC_DIR~=s,/,\\,g
HEADER_FILE~=s,/,\\,g
}
command =
command += $$CD $${LIB_SDK_PWD} $$CMD_SEP
command += $$CD $${LIB_INC_DIR} $$CMD_SEP
contains(QMAKE_HOST.os, Windows){
command += $${THIS_PRI_PWD}/win_write_header.bat $${headername} $${HEADER_FILE}
} else {
command += chmod +x $${THIS_PRI_PWD}/linux_write_header.sh $$CMD_SEP
command += $${THIS_PRI_PWD}/linux_write_header.sh $${headername} $${HEADER_FILE}
}
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK+=$$CMD_SEP
QMAKE_POST_LINK += $$command
export(QMAKE_POST_LINK)
return(1)
}