我们有一个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等? 有没有办法彻底刷新上一次编辑中构建的内容?或者还有其他什么东西在这里我不明白?
答案 0 :(得分:0)
我经常遇到这种情况。不幸的是, Clean 在它之后留下了几个奇怪的短裤。这就是我喜欢做下一步的原因:
qmake
,希望这个策略可以帮到你。