qmake Makefile在myWidget.o的规则中不包含对ui_form.h的依赖

时间:2012-09-25 07:18:16

标签: qt4 makefile qmake

我的设置:
我正在 Qt Designer 中创建和更新 form.ui 文件,并使用qmake生成的 Makefile 。使用 form.ui make正确生成 ui_form.h ,它包含在 myWidget.cc 中。

问题:
更新 form.ui 后,make会相应地重新生成 ui_form.h 。但是, myWidget.o 未重新生成,因此UI更新不会反映在重新编译的应用程序中。在检查 Makefile 时,发现 myWidget.o 规则不依赖于 ui_form.h

问题:
如何强制qmake在其生成的 Makefile 中包含所需的依赖项?
注意:由于每次运行qmake时都会自动生成 Makefile ,因此手动编辑 Makefile 只是一个临时解决方案,我宁愿避免。

相关:
- This question确定了类似问题,但仍处于开放状态。回复没有充分探讨问题(将其缩小到缺少的 Makefile 依赖关系),并且给出的解决方案不起作用。
- 讨论了如何向 Makefile here添加依赖项,但这个问题也是开放的,并且场景与我的不同。

1 个答案:

答案 0 :(得分:0)

我还遇到了myWidget.o规则未将ui_form.h列为makefile中的依赖项的问题。在我的例子中,ui_form.h是间接依赖(myWidget.h包含ui_form.h)。

要让Qmake生成包含头文件作为依赖项(直接或间接包含)的makefile,INCLUDEPATHDEPENDPATH需要正确设置(here)。

<强>生成文件

release/tmp/myWidget.o: src/source/myWidget.cpp src/source/myWidget.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release/tmp/myWidget.o src/source/myWidget.cpp

<强> Project.pro

INCLUDEPATH += src/header
DEPENDPATH += src/header

CONFIG += debug_and_release

CONFIG(debug, debug|release) {
     DESTDIR      = debug
     RCC_DIR      = debug/tmp
     OBJECTS_DIR  = debug/tmp
     UI_DIR       = debug/tmp
     MOC_DIR      = debug/tmp
     INCLUDEPATH += debug/tmp
     DEPENDPATH  += debug/tmp
} else {
     DESTDIR      = release
     RCC_DIR      = release/tmp
     OBJECTS_DIR  = release/tmp
     UI_DIR       = release/tmp
     MOC_DIR      = release/tmp
     INCLUDEPATH += release/tmp
     DEPENDPATH  += release/tmp
}

<强>生成文件

release/tmp/myWidget.o: src/source/myWidget.cpp src/source/myWidget.h \
                        release/tmp/ui_form.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release/tmp/myWidget.o src/source/myWidget.cpp