QT:一个通用工程文件配置,可以存储为common.pri

defineReplace(libraryName) {
   unset(LIBRARY_NAME)
   LIBRARY_NAME = $$1
   CONFIG(debug, debug|release) {
      !debug_and_release|build_pass {
          mac:RET = $$member(LIBRARY_NAME, 0)_debug
              else:win32:RET = $$member(LIBRARY_NAME, 0)d
      }
   }

   isEmpty(RET):RET = $$LIBRARY_NAME
   return($$RET)
}

#指定生成的临时文件放置的目录
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj

#指定生成的应用程序放置的目录
IDE_APP_TARGET  =
IDE_SOURCE_TREE = $$PWD #.pri文件所在的位置
IDE_BUILD_TREE  = $$IDE_SOURCE_TREE/../

#message($$IDE_SOURCE_TREE)

macx {
    IDE_APP_PATH    = $$IDE_BUILD_TREE/bin
    IDE_LIBRARY_PATH = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/PlugIns
    IDE_PLUGIN_PATH = $$IDE_LIBRARY_PATH
    IDE_DATA_PATH   = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/Resources
    IDE_BIN_PATH     = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/MacOS
    contains(QT_CONFIG, ppc):CONFIG += ppc x86
    copydata = 1
} else {
    IDE_BIN_PATH = $$IDE_BUILD_TREE/bin
    IDE_LIBRARY_PATH = $$IDE_BUILD_TREE/lib
    IDE_PLUGIN_PATH = $$IDE_LIBRARY_PATH/plugins
    IDE_DATA_PATH = $$IDE_BUILD_TREE/data
    !isEqual(IDE_SOURCE_TREE, $$IDE_BUILD_TREE):copydata = 1
}

win32:CONFIG(debug, debug|release){
    contains(DEFINES, WIN64) {
    DESTDIR = $$IDE_BUILD_TREE/_debug64
    } else {
    DESTDIR = $$IDE_BUILD_TREE/_debug86
    }
} else:win32:CONFIG(release, debug|release){
    contains(DEFINES, WIN64) {
    DESTDIR = $$IDE_BUILD_TREE/_release64
    } else {
    DESTDIR = $$IDE_BUILD_TREE/_release86
    }
}

macx:CONFIG(debug, debug|release){
    DESTDIR = $$IDE_BUILD_TREE/_debug64
} else:macx:CONFIG(release, debug|release){
    DESTDIR = $$IDE_BUILD_TREE/_release64
}

#Release禁止输出qWarning/qDebug信息
CONFIG (release, debug|release) {
DEFINES += QT_NO_WARNING_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
}

linux-g++-* {
    # Bail out on non-selfcontained libraries. Just a security measure
    # to prevent checking in code that does not compile on other platforms.
    QMAKE_LFLAGS += -Wl,--allow-shlib-undefined -Wl,--no-undefined
}

win32-msvc* {
    #Don't warn about sprintf, fopen etc being 'unsafe'
    DEFINES += _CRT_SECURE_NO_WARNINGS
}

linux* {
    contains(CONFIG, gl_qtwebkit) {
        DEFINES += GL_QTWEBKIT
    }
} else {
    greaterThan(QT_MAJOR_VERSION, 4) {
    } else {
        DEFINES += GL_QTWEBKIT
    }
}

#Release编译,生成*.pdb调试文件
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

这段代码做更详细的解释:

  1. defineReplace(qtLibraryName):这是一个用于修改库名的函数。函数接受一个参数(库名),根据当前的编译配置(调试或发布)来修改库名。例如,如果当前是调试配置,那么在Mac平台上会在库名后添加"_debug",在Win32平台上会在库名后添加"d"。

  2. MOC_DIRRCC_DIRUI_DIROBJECTS_DIR:这些变量定义了Qt的moc(元对象编译器)、rcc(资源编译器)、ui(用户界面编译器)和obj(目标文件)的输出路径。

  3. IDE_APP_TARGETIDE_SOURCE_TREEIDE_BUILD_TREE:这些变量定义了应用程序的目标名、源代码树的位置和构建树的位置。

  4. macx {...}:这个块定义了在Mac平台上的一些设置,例如应用程序的路径、库的路径、插件的路径、数据的路径和二进制文件的路径。

  5. win32:CONFIG(debug, debug|release){...} 和 win32:CONFIG(release, debug|release){...}:这两个块定义了在Windows平台上的一些设置,例如在调试和发布配置下,根据是否定义了WIN64来设置目标文件的输出路径。

  6. CONFIG (release, debug|release) {...}:这个块定义了在发布配置下的一些设置,例如禁止输出qWarning和qDebug信息。

  7. linux-g++-* {...}win32-msvc* {...}linux* {...}:这些块针对不同的编译器和平台(Linux g++、Windows MSVC、Linux)定义了一些特定的设置,例如链接选项、预处理器定义等。

  8. QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO 和 QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO:这两行使得在发布配置下生成的二进制文件包含了调试信息,这样在发布版本上也能进行一些调试操作。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值