我的设置:
我正在 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添加依赖项,但这个问题也是开放的,并且场景与我的不同。
答案 0 :(得分:0)
我还遇到了myWidget.o规则未将ui_form.h列为makefile中的依赖项的问题。在我的例子中,ui_form.h是间接依赖(myWidget.h包含ui_form.h)。
要让Qmake生成包含头文件作为依赖项(直接或间接包含)的makefile,INCLUDEPATH和DEPENDPATH需要正确设置(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