【问题标题】:How to separate release and debug builds in Qt?如何在 Qt 中分离发布和调试版本?
【发布时间】:2013-03-08 02:56:44
【问题描述】:

我想将发布和调试版本的二进制文件放在源代码旁边的不同文件夹中。在 .pro 文件中:

CONFIG(debug){
    DESTDIR = ./debug
    OBJECTS_DIR = debug/.obj
    MOC_DIR = debug/.moc
    RCC_DIR = debug/.rcc
    UI_DIR = debug/.ui
}

CONFIG(release){
    DESTDIR = ./release
    OBJECTS_DIR = release/.obj
    MOC_DIR = release/.moc
    RCC_DIR = release/.rcc
    UI_DIR = release/.ui
}

对于发布版本,一切都很好。我在项目的根目录中有一个 ./release 目录。但是对于调试构建,qmake 没有创建调试目录,它的名称是release(再次!):

qmake CONFIG+=debug CONFIG+=local 
// generates release and put everything in that directory
// but I want debug directory !

更新:

调换debug和release的顺序,建立debug目录。 qmake 只看到最后一个配置...

【问题讨论】:

  • 这不是自动发生的吗?对我来说确实如此 - 我在与项目文件夹相同的路径中的单独目录中获得不同的构建。
  • @ddriver 你可能在 Windows...
  • 是的,我猜它在 Linux 中是不同的。

标签: c++ qt4 qmake


【解决方案1】:

如果您确实需要进行源内构建并拥有单独的输出目录,我认为您需要将每个 documentation 的条件更改为

CONFIG(debug, debug|release){
    DESTDIR = ./debug
    OBJECTS_DIR = debug/.obj
    MOC_DIR = debug/.moc
    RCC_DIR = debug/.rcc
    UI_DIR = debug/.ui
}

CONFIG(release, debug|release){
    DESTDIR = ./release
    OBJECTS_DIR = release/.obj
    MOC_DIR = release/.moc
    RCC_DIR = release/.rcc
    UI_DIR = release/.ui
}

不过,不要问我为什么。恕我直言,QMake 是一种应不惜一切代价避免的可憎之物......

【讨论】:

  • 添加神秘的debug|release 修复了所有问题。我不问为什么!
  • 想详细说明您对 qmake 的看法? qmake 比我以前用过的许多其他构建管理工具要好得多...
  • @stephelton 语言晦涩难懂且非常不一致,代码库一团糟且基本上无法维护。甚至Qt devs agree。它不包括 configure-stage,用户可以在其中进行调整或作者可以搜索头文件、库和工具,并且它与 Qt 非常相关,对于非 Qt 项目几乎没有用处. qmake 现在被替换为qbs
  • @MichaelWild 感谢您提供的信息。你提到的“配置阶段”让我很沮丧。然而,正如我所提到的,它仍然比许多替代品好很多,而且我已经将它有效地用于非 Qt 项目。你有什么建议?在我看来,它的优点是它是跨平台的(理论上无论如何——我只在 Linux 上真正使用过它......),它支持大型、复杂的代码库,而且在命令行中都能很好地工作和IDE。使用任何现代包管理器进行安装都很轻松。
  • 我使用CMake,它非常强大且功能齐全。但是,它的语言也有不足之处,并不合所有人的口味……您不妨试试gypsconswafpremake
【解决方案2】:

真正的解决方案是进行源外构建。这样,您不必每次从调试切换到发布构建并返回时都重新配置。这样做,使用以下:

mkdir build-dbg
cd build-dbg
qmake ../foo.pro CONFIG+=debug
cd ..
mkdir build-rel
cd build-rel
qmake ../foo.pro CONFIG+=release

此外,您不会用构建碎片污染源树。

【讨论】:

  • 由于某些特定原因,我在服务器上的每个项目只有一个文件夹,并且服务器上的构建脚本只尝试 1 级目录...我当然不喜欢在源目录中混合二进制文件。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2011-03-19
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
相关资源
最近更新 更多