Qt Automake 单独包含,ui,资源文件夹
Qt Automake separate include, ui, resource folders
基于this link,我创建了一个Autotools-based build系统,无需调用QMAKE即可接受Qt UI和RSC文件。
但是我希望按以下方式将源 headers 和 ui-files 分成文件夹:
${srcdir}
├── Makefile.am
├── main.cc
├── include
│ └── mainwidget.h
├── src
│ └── mainwidget.cc
└── ui
└── mainwidget.ui
并按以下方式对 build 目录进行排序
${builddir}
├── include
│ └── ui_mainwidget.h
├── Makefile
├── main.o
├── mainwidget.o
└── moc_mainwidget.o
我的 Makefile.am 目前是这样的:
moc_%.cc: %.h
@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_%.h: %.ui
@UIC@ -o $@ $<
qrc_%.cc: %.qrc
@RCC@ -o $@ $<
bin_PROGRAMS = qthello
BUILT_SOURCES = ui_mainwidget.h
qthello_CXXFLAGS = -I$(srcdir)/include -I$(builddir)/include
qthello_CPPFLAGS = $(QT_CPPFLAGS)
qthello_LDFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)
qthello_SOURCES = \
moc_mainwidget.cc \
mainwidget.cc \
main.cc
如果 ui-class 文件位于 $(srcdir) 中,这会很好地工作,但是简单地将它们移动到所需的目录并更改 Makefile.am 中的预期行不会产生所需的结果.也就是说,进行这些更改不起作用:
BUILT_SOURCES = include/ui_mainwidget.h
[ ... ]
qthello_SOURCES = \
src/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
我突然想到,必须对 build 规则进行一些更改,以确保 include、src、ui - 目录存在于 $(builddir),并且传递了正确的输入文件。然而,我在编写这样的 build 规则方面缺乏经验,google 似乎没有答案。
是否有任何简单的可移植方法来实现此目的?
因此,由于 this post,我最终找到了解决方案。
以下是最后的Makefile.am
moc_%.cc: ../include/%.h
$(MKDIR_P) $(@D)
@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_%.h: ../ui/%.ui
$(MKDIR_P) $(@D)
@UIC@ -o $@ $<
qrc_%.cc: %.qrc
$(MKDIR_P) $(@D)
@RCC@ -o $@ $<
clean-local:
rm -rf ui/ include/
bin_PROGRAMS = qthello
BUILT_SOURCES = \
include/ui_mainwidget.h
qthello_CXXFLAGS = \
-I$(srcdir)/include \
-I$(builddir)/include
qthello_CPPFLAGS = $(QT_CPPFLAGS)
qthello_LFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)
qthello_SOURCES = \
ui/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
请记住,AC_PROG_MKDIR_P
必须添加到 configure.ax
。
基于this link,我创建了一个Autotools-based build系统,无需调用QMAKE即可接受Qt UI和RSC文件。
但是我希望按以下方式将源 headers 和 ui-files 分成文件夹:
${srcdir}
├── Makefile.am
├── main.cc
├── include
│ └── mainwidget.h
├── src
│ └── mainwidget.cc
└── ui
└── mainwidget.ui
并按以下方式对 build 目录进行排序
${builddir}
├── include
│ └── ui_mainwidget.h
├── Makefile
├── main.o
├── mainwidget.o
└── moc_mainwidget.o
我的 Makefile.am 目前是这样的:
moc_%.cc: %.h
@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_%.h: %.ui
@UIC@ -o $@ $<
qrc_%.cc: %.qrc
@RCC@ -o $@ $<
bin_PROGRAMS = qthello
BUILT_SOURCES = ui_mainwidget.h
qthello_CXXFLAGS = -I$(srcdir)/include -I$(builddir)/include
qthello_CPPFLAGS = $(QT_CPPFLAGS)
qthello_LDFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)
qthello_SOURCES = \
moc_mainwidget.cc \
mainwidget.cc \
main.cc
如果 ui-class 文件位于 $(srcdir) 中,这会很好地工作,但是简单地将它们移动到所需的目录并更改 Makefile.am 中的预期行不会产生所需的结果.也就是说,进行这些更改不起作用:
BUILT_SOURCES = include/ui_mainwidget.h
[ ... ]
qthello_SOURCES = \
src/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
我突然想到,必须对 build 规则进行一些更改,以确保 include、src、ui - 目录存在于 $(builddir),并且传递了正确的输入文件。然而,我在编写这样的 build 规则方面缺乏经验,google 似乎没有答案。
是否有任何简单的可移植方法来实现此目的?
因此,由于 this post,我最终找到了解决方案。
以下是最后的Makefile.am
moc_%.cc: ../include/%.h
$(MKDIR_P) $(@D)
@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_%.h: ../ui/%.ui
$(MKDIR_P) $(@D)
@UIC@ -o $@ $<
qrc_%.cc: %.qrc
$(MKDIR_P) $(@D)
@RCC@ -o $@ $<
clean-local:
rm -rf ui/ include/
bin_PROGRAMS = qthello
BUILT_SOURCES = \
include/ui_mainwidget.h
qthello_CXXFLAGS = \
-I$(srcdir)/include \
-I$(builddir)/include
qthello_CPPFLAGS = $(QT_CPPFLAGS)
qthello_LFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)
qthello_SOURCES = \
ui/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
请记住,AC_PROG_MKDIR_P
必须添加到 configure.ax
。