QT 编写.pro .pri 对编译输出整理和标准化

 文件主要是用于QT对区别不同编译器的文件输出,目前只写了 win , linux 和 mac 有项目需求再补充,   BUILD_OUTPUT_PATH 是最后的目录名称,

当QT安装了MSVC编译支持时,项目在选择的VS第一次编译或qmake时,会在项目目录中生成MSVC目录,并在MSVC目录中生成.sln等MSVC项目构建文件。

效果图

 在QT转换为MSVC的效果图, 可以直接用MSVC打开编译

 以下是完整的 pri, 如果想更好的效果,建议在每个pro的TEMPLATE后将其incoude,

#   文件主要是用于QT对区别不同编译器的文件输出,目前只写了 win , linux 和 mac 有项目需求再补充,
#   BUILD_OUTPUT_DIR_NAME 是最后的目录名称
#   文件后面的是设置输出到目标目录 DESTDIR  = $$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/
#
#   2022-02-24  63744457@qq.com
#   2022-02-25  63744457@qq.com
#   2022-02-28AM  63744457@qq.com   复制动态库到程序目录
#   2022-02-28PM  63744457@qq.com   增加 QT项目 转 MSVC功能
#   2022-03-07  63744457@qq.com    修改debug复制内部库异常
#   2022-03-12  63744457@qq.com    增加 __COMPILE_RELEASE__  __COMPILE_DEBUG__
#   2022-03-16  63744457@qq.com
#       DEFINES 加入项目路径 PROJECT_PATH=\\\"$$TARGET_PWD/../\\\"
#       重新定义 OBJECTS_DIR 输出路径
#   2022-03-16  63744457@qq.com
#       去除 QMAKE_POST_LINK因为太占资源, release编译时会自动生成create_qtenv.bat, 需要时才创建程序的QT运行环境
#       msvc强制为 /source-charset:utf-8 /execution-charset:utf-8
#       toLocal8Bit:Unicode编码
#       toLatin1:ASCII编码
#   2022-03-21  63744457@qq.com
#       修改 include 目录生成位置,在build目录中生成
#   2022-03-22  63744457@qq.com
#   加入 LIBS_SATAIC_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/libs_static"
#   2022-04-03  63744457@qq.com
#    __COMPILE_MSVC__ 加入版本号 2008 2010 2012 2013......
#   2023-06-03  63744457@qq.com
#       加入完善 linux
#   2023-06-14  63744457@qq.com
#       生成linux软件的运行脚本
#   2023-06-16  63744457@qq.com
#       生成win dug下软件的运行脚本
#   2023-06-19  63744457@qq.com
#       生成win release 下软件的运行脚本
#   2023-06-20  63744457@qq.com
#       因为QtCreator 项目运行目录和 qmake输出目录不一至,在QT4.8.7及以下要区分大小
#       contains( MAKEFILE_GENERATOR, "MINGW" )
#
#   2023-09-01  63744457@qq.com
#       添加了格式化打印输出文件 COperationRecord.cpp COperationRecord.h
#
#   2023-09-23  63744457@qq.com
#       为了方便MSVC代码中直接引用库,加入了 DEFINES += LIBS_OUTPUT_PATH=\\\"$${LIBS_OUTPUT_PATH}\\\"
#       使用方法 #pragma comment( lib, LIBS_OUTPUT_PATH"/xxxx.lib" )




TARGET_PWD=$$PWD
message( "------$${TARGET}":  "start------------------------------------------" )
CONFIG += qt
  #  message( $${TARGET}": QT_VERSION= "$${QT_VERSION} )
  #  message( $${TARGET}": MAKEFILE_GENERATOR= "$${MAKEFILE_GENERATOR} )
contains(QT_MAJOR_VERSION, 4): {
    DEFINES += nullptr=NULL
#    SYSTEMINFO = $${system("systeminfo")}
# #   message( $${TARGET}": SYSTEMINFO= "$${SYSTEMINFO} )
#    contains( SYSTEMINFO, "Windows\\\ 10" ):{
#         CONFIG += windows10
#    }
#    contains( SYSTEMINFO, "Windows" ):{ # CONFIG += windows10
#      #  contains( SYSTEMINFO, "x64-based" ):{QT_ARCH=x86_64 } else:{ QT_ARCH=i386}
#    }

}

#message( $${TARGET}": CONFIG= "$${CONFIG} )
#message( $${TARGET}": TARGET_PWD= "$$TARGET_PWD )
#message( $${TARGET}": QT_ARCH= "$$QT_ARCH )
#message( $${TARGET}": QT = "$${QT} )
#message( $${TARGET}": QMAKE = "$${QMAKE}  )
#message( $${TARGET}": QMAKE_CC = "$${QMAKE_CC}  )
#message( $${TARGET}": QMAKE_CXX = "$${QMAKE_CXX}  )
#message( $${TARGET}": QMAKESPEC = "$${QMAKESPEC}  )
#message( $${TARGET}": DEFINES= "$${DEFINES} )
#message( $${TARGET}": QT_ARCH= "$$[QT_ARCH] )
#message( $${TARGET}": QT_MAJOR_VERSION= "$${QT_MAJOR_VERSION} )
#unix:{
#message( $${TARGET}": UNAME = "$${system("uname --a")}  )
#}


DEFINES += PROJECT_PATH=\\\"$$TARGET_PWD/\\\"
BUILD_OUTPUT_DIR_NAME=""
COMPILE_TOOLS=""
win32:{
     BUILD_OUTPUT_DIR_NAME = "win"
#    message($${TARGET}":  ""win");
    contains( CONFIG, "mingw" ) || contains( MAKEFILE_GENERATOR, "mingw" ) || contains( MAKEFILE_GENERATOR, "MINGW" ):{
 #   QMAKE_CXXFLAGS += -shared --output-def dlltest.def
        BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_mingw"
#        message($${TARGET}":  ""msvc");
        DEFINES += __COMPILE_MINGW__

        contains( QMAKE_CXX, "g++" ) :{
          #  BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_gxx"
            DEFINES += __GXX__ __GCC__
            DEFINES += __COMPILE_GXX__ __COMPILE_GCC__ __COMPILE_GNUC__
            COMPILE_TOOLS = win-g++ g++
         } else:  contains( QMAKE_CC, "gcc" ) :{
          #  BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_gcc"
            DEFINES += __GCC__
            DEFINES += __COMPILE_GCC__ __COMPILE_GNUC__
            COMPILE_TOOLS = win-gcc
         }
    } else {

        contains( CONFIG, "msvc" ): QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8
        contains( CONFIG, "msvc" ): QMAKE_CFLAGS += /source-charset:utf-8 /execution-charset:utf-8
        contains( CONFIG, "msvc" ): QMAKE_CXX += /source-charset:utf-8 /execution-charset:utf-8

        contains( CONFIG, "win32-msvc2017" ):{
            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc2017"
#            message($${TARGET}":  ""msvc2017");
            DEFINES += __COMPILE_MSVC2017__
            DEFINES += __COMPILE_MSVC__=2017
            COMPILE_TOOLS = win32-msvc2017
         } else {
            contains( CONFIG, "win32-msvc2015" ):{
                BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc2015"
#                message($${TARGET}":  ""msvc2015");
                DEFINES += __COMPILE_MSVC2015__
                DEFINES += __COMPILE_MSVC__=2015
                COMPILE_TOOLS = win32-msvc2015
             } else {
                contains( CONFIG, "win32-msvc2019" ):{
                    BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc2019"
#                    message($${TARGET}":  ""msvc2019");
                    DEFINES += __COMPILE_MSVC2019__
                    DEFINES += __COMPILE_MSVC__=2019
                    COMPILE_TOOLS = win32-msvc2019
                 } else {
                    contains( CONFIG, "win32-msvc2013" ):{
                        BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc2013"
    #                    message($${TARGET}":  ""msvc2013");
                        DEFINES += __COMPILE_MSVC2013__
                        DEFINES += __COMPILE_MSVC__=2013
                        COMPILE_TOOLS = win32-msvc2013
                     } else {
                        contains( CONFIG, "win32-msvc2008" ):{
                            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc2008"
        #                    message($${TARGET}":  ""msvc2019");
                            DEFINES += __COMPILE_MSVC2008__
                            DEFINES += __COMPILE_MSVC__=2008
                            COMPILE_TOOLS = win32-msvc2008
                         } else {
                             contains( CONFIG, "msvc" ):{
                                BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_msvc"
        #                        message($${TARGET}":  ""msvc");
                                DEFINES += __COMPILE_MSVC__=1
                                COMPILE_TOOLS = win32-msvc20xx
                            }
                        }
                    }
                }
            }
        }

        contains( CONFIG, "msvc_cross" ):contains( CONFIG, "package_manifest" ):contains( CONFIG, "winrt" ):{
            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_uwp"
#            message($${TARGET}":  ""msvc2017");
            DEFINES += __UWP__
         }

    }
} else:unix:{
    message($${TARGET}":  ""unix linux")
        BUILD_OUTPUT_DIR_NAME = "lin"
#        contains( QMAKE_CC, "gcc" ) | contains( QMAKE_CXX, "g++" ) :{
#            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_gcc"
#            DEFINES += __GCC__
#            DEFINES += __COMPILE_GCC__
#         }

        contains( QMAKE_CXX, "g++" ) :{
            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_gxx"
            DEFINES += __GXX__
            DEFINES += __COMPILE_GCC__ __COMPILE_GXX__
            COMPILE_TOOLS = linux-gxx
         } else:  contains( QMAKE_CC, "gcc" ) :{
            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_gcc"
            DEFINES += __GCC__
            DEFINES += __COMPILE_GCC__
            COMPILE_TOOLS = linux-gcc
         }

}
else:macx:{
    message($${TARGET}":  ""macx")
}



contains(QT_ARCH, x86_64) {
#    message($${TARGET}":  ""x86_64")
    DEFINES += __ARCH_X86_64__ __SYS64BIT__
    BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_x86_64"
} else {
    contains(QT_ARCH, i386) {
    #    message($${TARGET}":  ""x86")
        DEFINES += __ARCH_I386__  __ARCH_I686__ __SYS32BIT__
        BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_i386"
    } else {
        contains(QT_ARCH, arm64) { # 不知 arm64 对不对, 没测试
        #    message($${TARGET}":  ""arm64")
            DEFINES += __ARCH_ARM64__  __SYS64BIT__
            BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_aram64"
        } else {
            contains(QT_ARCH, arm32) { # 不知 arm32 对不对, 没测试
            #    message($${TARGET}":  ""arm32")
                DEFINES += __ARCH_X86_64__ __SYS64BIT__
                BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_x86_64"
            } else {
              contains(QT_MAJOR_VERSION, 4): {
                DEFINES += __ARCH_I386__  __ARCH_I686__ __SYS32BIT__
                BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_i386"
               } else{
                 error("---->I don't know what the environment is, so I need to supplement the settings.") # 不知是什么环境,要补充
                }
            }
        }
    }
}


CONFIG( debug, "debug | release" ): {
# message($${TARGET}":  ""MyDebug");
    BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_debug"
    CONFIG -= release Release
    CONFIG -= debug_and_release debug_and_release_target
    DEFINES +=  __COMPILE_DEBUG__
} else {
# 判断 profile 还是 release
     contains( CONFIG , "force_debug_info" ): { # profile
# message($${TARGET}":  ""MyProfile");
# message($${TARGET}":  ""force_debug_info");
        BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_profile"
    } else { # release
# message($${TARGET}":  ""MyRelease");
# message($${TARGET}":  "" not force_debug_info");
        BUILD_OUTPUT_DIR_NAME = $${BUILD_OUTPUT_DIR_NAME}"_release"
    }
    CONFIG -= debug Debug
    CONFIG -= debug_and_release debug_and_release_target
    DEFINES +=  __COMPILE_RELEASE__
}

contains(CONFIG,qt): BUILD_OUTPUT_DIR_NAME =$${BUILD_OUTPUT_DIR_NAME}"Qt"$${QT_VERSION}

# 2022-02-28 复制动态库到程序目录
# BUILD_OUTPUT_DIR_NAME = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}"
BUILD_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}"
BINS_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/bin"
LIBS_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/libs" # 动态库
LIBS_SATAIC_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/libs_static" # 动态库
# INC_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/include"
INC_OUTPUT_PATH = "$$TARGET_PWD/build/include"

DEFINES += LIBS_OUTPUT_PATH=\\\"$${LIBS_OUTPUT_PATH}\\\"
DEPENDPATH += $$LIBS_OUTPUT_PATH

contains(TEMPLATE,lib) | contains(TEMPLATE,vclib): {
# message($${TARGET}":  "lib)
    contains( CONFIG , "staticlib" ):{ # 静态库
        LIBS_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/libs_static/"
    } else { # 动态库
        LIBS_OUTPUT_PATH = "$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/libs"
    }

    !exists($$INC_OUTPUT_PATH):{
        win32:{
            INC_OUTPUT_PATH = $$replace( INC_OUTPUT_PATH,"/","\\")
            system(mkdir $${INC_OUTPUT_PATH}"\\" )
        }else: unix:{
            system(mkdir -p $${INC_OUTPUT_PATH} )
        }else: maxc:{# 没用过这系统
            system(mkdir $${INC_OUTPUT_PATH}"\\" )
        }
    }

    message($${TARGET}":  "$${LIBS_OUTPUT_PATH})
    DESTDIR  = $${LIBS_OUTPUT_PATH}/
} else:contains(TEMPLATE,app)|contains(TEMPLATE,vcapp):{
#2022-02-28 复制动态库到程序目录
    #message($${TARGET}":  "app)
    #isEmpty($$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}"/libs"):  message($${TARGET}":  "isEmpty)
    exists($$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}"/libs"):{ # 复制动态库到程序目录
        #message($${TARGET}":  "exists)
            export($${LIBS_OUTPUT_PATH})
        win32:{
            #message($${TARGET}":  "copy)
            LIBS_OUTPUT_PATH = $$replace( LIBS_OUTPUT_PATH,"/","\\")
            BINS_OUTPUT_PATH = $$replace( BINS_OUTPUT_PATH,"/","\\")
            contains(CONFIG,qt):{
             contains( CONFIG, release ): {
                 #QMAKE_POST_LINK +=  "copy /B /V /Y $${LIBS_OUTPUT_PATH}\\*.dll  $${LIBS_OUTPUT_PATH}\\..\\bin" |
                  BAT_PATH += "copy /B /V /Y .\\libs\\*.dll  .\\bin\\" ^|
                }
          #   else: QMAKE_POST_LINK +=  "copy /B /V /Y $${LIBS_OUTPUT_PATH}\\*.dll  $${LIBS_OUTPUT_PATH}\\..\\bin"
            }  else: {
                #QMAKE_POST_LINK +=  "copy /B /V /Y $${LIBS_OUTPUT_PATH}\\*.dll  $${BINS_OUTPUT_PATH}"
                BAT_PATH += "copy /B /V /Y .\\libs\\*.dll  .\\bin\\"
            }
              #  QMAKE_POST_LINK +=  "copy /B /V /Y $${LIBS_OUTPUT_PATH}\\*.dll  $${BINS_OUTPUT_PATH}"
        } else: unix:{
            #QMAKE_POST_LINK +=  cp -f $${LIBS_OUTPUT_PATH}"/*.so"  $${LIBS_OUTPUT_PATH}/../bin
            BAT_PATH += cp -f ./libs"/*.so"  ./bin
        } else: maxc:{# 没用过这系统
        #    QMAKE_POST_LINK +=  cp -f $${LIBS_OUTPUT_PATH}"/"  $${LIBS_OUTPUT_PATH}/../bin
            BAT_PATH += cp -f ./libs"/*.so"  ./bin
        }
    }

#    system(mkdir $${TARGET_PWD}"\\libs" )
    DESTDIR  = $${BINS_OUTPUT_PATH}/

} else : {
    DESTDIR  = $${BINS_OUTPUT_PATH}/../
}


OBJECTS_DIR =  "$$OUT_PWD/$${BUILD_OUTPUT_DIR_NAME}/"
#MOC_DIR = "$$TARGET_PWD/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_moc"
#UI_DIR =  "$$TARGET_PWD/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_ui"
#RCC_DIR  =  "$$TARGET_PWD/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_rcc"
MOC_DIR = "$$TARGET_PWD/build/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_moc"
UI_DIR =  "$$TARGET_PWD/build/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_ui"
RCC_DIR  =  "$$TARGET_PWD/build/create/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}_rcc"

# 增加 QT 转 VS
contains( CONFIG, msvc ):!exists(./msvc/qt2vs_readme.txt):{
    MSVC_OUTPUT_PATH = $$replace( TARGET_PWD,"/","\\")
    system(mkdir $${MSVC_OUTPUT_PATH}\\msvc )
    system(echo "Only run QT to vs once. If you want to run again, delete this file!">>./msvc/qt2vs_readme.txt )
    system(echo "只运行一次QT转VS,如果要重新运行,删除本文件即可!">>./msvc/qt2vs_readme.txt )
    QMAKE_CXXFLAGS += -Gm
  #  CONFIG+=dll
    contains(TEMPLATE,subdirs): {
        #message(subdirs)
     #   system(qmake -r -spec win32-msvc2017 -tp vc -o ./msvc/) # 含子项目,指定VS版本
        system(qmake -r -tp vc  -o ./msvc/) # 含子项目
    } else : {
       # message(app)
        #system(qmake -spec win32-msvc2017 -tp vc  -o ./msvc/) # 不含子项目,指定VS版本
        system(qmake -tp vc -o ./msvc/) # 不含子项目
    }
}




#OBJECTS_DIR += $$OUT_PWD/../obj/$${BUILD_OUTPUT_DIR_NAME}/
#message($${TARGET}":  "$${OBJECTS_DIR});


# 在编译 release 后为程序添加相关的qt dll文件
CONFIG( release, "debug | release" ):{
    contains(CONFIG,qt):!contains(TEMPLATE,lib):!contains(TEMPLATE,vclib):!contains(TEMPLATE,subdirs):!contains(TEMPLATE,vcsubdirs):{

        QT_HOST_BIN = $$[QT_HOST_BINS]
                QT_HOST_BIN =$$replace( QT_HOST_BIN,"/","\\")
        exists($$[QT_HOST_BINS]/windeployqt.exe):  {
            contains( CONFIG , "force_debug_info" ):{ # profile
               # QMAKE_POST_LINK += $$[QT_HOST_BINS]/windeployqt.exe --release --force --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
            #    QMAKE_POST_LINK += $$[QT_HOST_BINS]/windeployqt.exe --release --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
                WINDEPLOYQT_COMMAND =  $$[QT_HOST_BINS]/windeployqt.exe --release --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
                BAT_QTPATH += $$[QT_HOST_BINS]/windeployqt.exe --release --qmldir ./qml/ --dir ./bin/ ./bin/$${TARGET}.exe
            } else { # release
                #QMAKE_POST_LINK += $$[QT_HOST_BINS]/windeployqt.exe --force --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
              #  QMAKE_POST_LINK += $$[QT_HOST_BINS]/windeployqt.exe --force --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
                WINDEPLOYQT_COMMAND =  $$[QT_HOST_BINS]/windeployqt.exe --force --qmldir $${TARGET_PWD} --dir $${DESTDIR} $${DESTDIR}$${TARGET}.exe
                BAT_QTPATH += $$[QT_HOST_BINS]/windeployqt.exe --force --qmldir ./qml/ --dir ./bin/ ./bin/$${TARGET}.exe
            }
                WINDEPLOYQT_COMMAND=$$replace( WINDEPLOYQT_COMMAND,"/","\\")
                #QMAKE_POST_LINK += $$WINDEPLOYQT_COMMAND
#                message("QT_HOST_BIN: " $$[QT_HOST_BIN]  )
#                message("QT_HOST_BIN: " $${QT_HOST_BIN}  )
#                message("QT_HOST_BIN: " $$QT_HOST_BIN  )

      #      message("BAT_PATH: " $$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat )


            !exists($$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat): {
                #D:\Qt\Qt5.12.2\5.12.2\mingw73_64\bin\qtenv2.bat
                #set PATH=D:\Qt\Qt5.12.2\5.12.2\mingw73_64\bin;D:\Qt\Qt5.12.2\Tools\mingw730_64\bin;%PATH%
                contains( CONFIG, "mingw" ):{
                    contains(QT_ARCH, x86_64): PATH=$$[QT_HOST_BINS];$$[QT_HOST_BINS]/../../../Tools\mingw730_64\\bin;^%PATH^%
                    else: PATH=$$[QT_HOST_BINS];$$[QT_HOST_BINS]/../../../Tools\mingw730_32\\bin;^%PATH^%
                    SYS_QT_PATH=$$replace( PATH,"/","\\")
                    system( "echo set PATH=$$SYS_QT_PATH >$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat" )
                }

                BAT_PATH +=$$replace( BAT_QTPATH,"/","\\")
                BAT_PATH +=  "^| copy /B /V /Y $$QT_HOST_BIN\\*work.dll  .\\bin\\"


                exists($$TARGET_PWD/libs/build/$${BUILD_OUTPUT_DIR_NAME}/libs): BAT_PATH +=  "^| copy /B /V /Y ..\\..\\libs\\..\\build\\$${BUILD_OUTPUT_DIR_NAME}\\libs\\*.dll  .\\bin\\"
                else: exists($$TARGET_PWD/libs/$${BUILD_OUTPUT_DIR_NAME}/libs): BAT_PATH +=  "^| copy /B /V /Y ..\\..\\libs\\$${BUILD_OUTPUT_DIR_NAME}\\libs\\*.dll  .\\bin\\"
                else: exists($$TARGET_PWD/libs): BAT_PATH += " ^| copy /B /V /Y ..\\..\\libs\\*.dll  .\\bin\\"
                else: exists($$TARGET_PWD/lib): BAT_PATH += " ^| copy /B /V /Y ..\\..\\lib\\*.dll  .\\bin\\"

                #message("QT_HOST_PREFIX : " $$[QT_HOST_PREFIX]  )
                #message("SYS_QT_PATH: " $$SYS_QT_PATH  )

                system( "echo cd /d %~dp0 >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat" )
                system( "echo %~d0 >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat" )
                system( "echo $$BAT_PATH >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/create_qtenv.bat" )
            }
        }

unix:!exists($$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.sh): {
    #SH_FILE =\\\"  #!/bin/bash

    #SH_FILE =\\\"\\$\\(dirname \\$"0"\\)\\\"
    #system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.sh" )

    SH_FILE ="current_dir="\\\"\\$\\(dirname \\$"0"\\)\\\"\\\n
    SH_FILE +="LD_LIBRARY_PATH="\\$"libdir:"\\${current_dir}"/libs:"\\$"{LD_LIBRARY_PATH:+:"\\$"LD_LIBRARY_PATH}"\\\n
    SH_FILE += "export LD_LIBRARY_PATH"\\\n
    SH_FILE += "sudo chmod a+x "\\$"{current_dir}/bin/"$${TARGET}\\\n
    SH_FILE += "exec  "\\$"{current_dir}/bin/"$${TARGET}

    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.sh" )
    system( "sudo chmod a+x $$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.sh" )

}



    }
}

#CONFIG( debug, "debug | release" ):
{
    !contains(TEMPLATE,lib):!contains(TEMPLATE,vclib):!contains(TEMPLATE,subdirs):!contains(TEMPLATE,vcsubdirs):{

        QT_HOST_BIN = $$[QT_HOST_BINS]
win32:!exists($$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat): {

    SH_FILE ="@echo off"
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    SH_FILE ="echo Setting up environment for Qt usage..."
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    #SH_FILE ="set current_app=%~dp0\"bin/"$${TARGET}".exe\""
    #system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    SH_FILE ="set PATH=$${LIBS_OUTPUT_PATH};%PATH%"
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

#    SH_FILE ="set PATH=%QT_HOST_BIN%;%QT_HOST_BIN%\\..\\..\\Tools\\mingw730_64\\bin;$${LIBS_OUTPUT_PATH};%PATH%"
#    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    SH_FILE = "cd /D %~dp0\"bin\""
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    SH_FILE ="start $${TARGET}.exe"
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

    SH_FILE = "exit"
    system( "echo $$SH_FILE >>$$TARGET_PWD/build/$${BUILD_OUTPUT_DIR_NAME}/$${TARGET}.bat" )

}
}
}


message("------$${TARGET}":  "config------------------------------------------")

message($${TARGET}":  TEMPLATE = "$${TEMPLATE})
message($${TARGET}":  QT_HOST_BINS = "$$[QT_HOST_BINS])
message($${TARGET}":  QMAKE_POST_LINK = "$${QMAKE_POST_LINK})

message($${TARGET}":  ""CONFIG = "$${CONFIG})
message($${TARGET}":  ""DEFINES" = $$DEFINES )
message($${TARGET}":  DESTDIR = "$${DESTDIR})

message($${TARGET}":  DEPENDPATH = "$${DEPENDPATH})
message($${TARGET}":  OBJECTS_DIR = "$${OBJECTS_DIR})
message($${TARGET}":  MOC_DIR = "$${MOC_DIR})
message($${TARGET}":  UI_DIR = "$${UI_DIR})
message($${TARGET}":  RCC_DIR = "$${RCC_DIR})
message($${TARGET}":  LIBS_OUTPUT_PATH = "$${LIBS_OUTPUT_PATH})

#CONFIG+=dll

message("------$${TARGET}":  "finish------------------------------------------")

exists($$PWD/COperationRecord.cpp) : exists($$PWD/COperationRecord.h) : {
HEADERS += \
    $$PWD/COperationRecord.h

SOURCES += \
    $$PWD/COperationRecord.cpp
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值