Qt项目文件无法在Windows上以发布模式干净地重新编译

时间:2015-07-03 11:38:00

标签: c++ windows qt

我们有一个Windows桌面软件,它使用项目文件中的标志来选择要使用的客户端特定功能。我们有两个与我们用软件控制的外部设备的接口(材料测试机)。

如下所示,我们在项目中使用不同的库(dll),具体取决于所讨论的客户端。

问题是当我在Qt Creator中打开发布模式时,当我在clientselection.pri中切换客户端时,似乎有某种缓存无法清除。我从错误的DLL等获取错误消息。我们正在使用Qt 5.3并使用MSVC2013进行编译。

在调试模式下,我们通常没有这样的问题,至少没有“全部清除+运行qmake +重建全部”无法修复。

在构建之间更改影子目录没有帮助。无论“缓存”是什么,似乎都在其他地方。

项目结构如下。 (在Linux上,这样的问题从未出现过,尽管已经有一段时间整个项目是在Linux上编译的。)

MainApp.pro

include (clientselection.pri)
include(clientconfiguration.pri)

clientselection.pri(不在版本控制中,因此每个开发人员都可以在他们的开发PC上切换客户端)

CONFIG+=CLIENT1
DEFINES+=CLIENT1

clientconfiguration.pri(在版本控制中)

CLIENT1{
    # PRODUCT_ID shows in installer directory and installer filename and start menu
    PRODUCT_ID=Client1
    message(Client1 selected clientconfiguration.pri)
    LIBS += "c://project//lib/library1.lib"
}


CLIENT2{
    # PRODUCT_ID shows in installer directory and installer filename and start menu
    PRODUCT_ID=Client2
    message(Client2 selected clientconfiguration.pri)
    LIBS += "c://project//lib/library2.lib"
}

还有另一个.pri文件确定当前数据库版本,并且在发布模式下也可能在最终二进制文件中出错。 (Db版本是在编译时确定的,因为它是db文件名的一部分,并且通过在编译时将其写入文本文件也被转发到NSIS安装程序。)

这是一个完全错误的选择方法,编译时,包括什么dll等? 有没有办法彻底刷新上一次编辑中构建的内容?或者还有其他什么东西在这里我不明白?

1 个答案:

答案 0 :(得分:0)

我经常遇到这种情况。不幸的是, Clean 在它之后留下了几个奇怪的短裤。这就是我喜欢做下一步的原因:

  • 从QtCreator执行 Clean
  • 手动删除影子文件夹(或在项目设置中添加自定义处理步骤作为清洁步骤,并使用一些将清除所有内容的脚本),
  • 在当前项目上运行qmake
  • 构建

希望这个策略可以帮到你。