0

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

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

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

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

4

1 回答 1

0

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

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

生成文件

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

项目.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
于 2015-12-02T16:36:52.493 回答