QMake无法更新子目录的makefile文件。

11

问题

我正在使用qmake和QT Creator处理多可执行文件的QT项目。每个可执行文件都有自己的.pro文件,所有这些文件都包含在一个总体的.pro文件中(模板=子目录)。每个独立的.pro文件还包括一个共同的.pri文件,该文件设置了DESTDIR,以便所有可执行文件最终都在同一个位置。这个DESTDIR取决于是编译Debug还是Release版本。这一切都很好,直到我们通过另一个子目录.pro添加了一组可执行文件。整体设置看起来像这样:

  • All.pro
  • | - Project1.pro
  • | - Project2.pro
  • | - Subdirs.pro
  • | -- | - Project3.pro
  • | -- | - Project4.pro

如果您拥有一个新检出的副本,则可以运行qmake,并且一切都能正常工作,直到您从Debug切换到Release或者反之。当您这样做时,Project1.pro和Project2.pro会更新并将其可执行文件放置在正确的目录中,但是Project3.pro和Project4.pro会使用旧目录。


尝试

如果我手动删除所有受影响的makefile,qmake将生成新的makefile。我想我可以编写某种预编译命令来每次删除所有makefile,但这似乎是错误的方法,更不用说我需要花费多少时间来确保它在我们的所有平台上都能正常工作。

我在QT 4.6.4到4.8.1中尝试过这种情况。

当我使用QT Creator时,我通过使用不同的构建配置在Debug和Release模式之间切换,这模仿了我在命令行上所做的操作(即添加或删除CONFIG += debug)


问题

  • 是什么阻止了qmake更新makefile?
  • 如果这只是qmake的一个错误,最佳解决方案是什么?

非常感谢您提供的任何帮助。


你能增加一些关于你如何在发布版和调试版之间进行切换的信息吗?是通过QtCreator还是命令行?如果是通过命令行,具体使用哪些命令?你是否运行任何自定义目标来进行切换? - Caleb Huitt - cjhuitt
我已经更新了问题,包括那个。 - Tsubashi
2个回答

10

尽管QMake文档指出它仅适用于项目模式(创建.pro文件),请尝试向qmake添加-r选项,以强制其递归遍历目录。

这是我们过去在多层级SUBDIR项目中使用的方法。


似乎对我不起作用。诚然,它会生成新的makefile文件并以新名称命名(例如makefile.Project3而不是makefile.Subdirs.Project3),并且具有正确的配置,但它们似乎被忽略了。 - Tsubashi
@cscott 在运行 qmake 之前,使用 make distclean 删除现有的 makefile 如何? - jwernerny
虽然这样做是可行的,但我还需要一个能放入.pro文件中的解决方案,因为我不能提交我的.user文件。有什么想法吗? - Tsubashi
我认为除了你已经拥有的内容之外,.pro文件中没有其他可以添加的内容。在我们的项目中,我们只是将其作为需要完成的额外构建步骤。 - jwernerny
谢谢,由于没有更好的选择,我们也只能这样做了。 - Tsubashi

1
我们曾遇到同样的问题,并通过在切换 debug/release 后从顶级目录运行 "make qmake" 解决了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接