C++ Qt自动创建单独的包括、用户界面、资源文件夹
基于,我创建了一个基于Autotools的构建系统,它接受Qt UI和RSC文件,而无需调用QMAKE 但是,我希望以以下方式将源文件、头文件和ui文件分离到文件夹中:C++ Qt自动创建单独的包括、用户界面、资源文件夹,c++,qt,autotools,automake,C++,Qt,Autotools,Automake,基于,我创建了一个基于Autotools的构建系统,它接受Qt UI和RSC文件,而无需调用QMAKE 但是,我希望以以下方式将源文件、头文件和ui文件分离到文件夹中: ${srcdir} ├── Makefile.am ├── main.cc ├── include │ └── mainwidget.h ├── src │ └── mainwidget.cc └── ui └── mainwidget.ui 并按以下方式对构建目录进行排序 ${builddir} ├── in
${srcdir}
├── Makefile.am
├── main.cc
├── include
│ └── mainwidget.h
├── src
│ └── mainwidget.cc
└── ui
└── mainwidget.ui
并按以下方式对构建目录进行排序
${builddir}
├── include
│ └── ui_mainwidget.h
├── Makefile
├── main.o
├── mainwidget.o
└── moc_mainwidget.o
My 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
我突然想到,必须对构建规则进行一些更改,以确保在$(builddir)中存在include、src、ui-目录,并传递正确的输入文件。然而,我在编写此类构建规则方面缺乏经验,谷歌似乎没有答案
有什么简单的便携式方法可以实现这一点吗?所以我最终找到了一个解决方案,多亏了 下面是最终的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
moc\%.cc:../include/%.h
$(MKDIR_P)$(@D)
@MOC@-o$@$(DEFS)$(默认值包括)$(包括)$(AM\U CPPFLAGS)$(CPPFLAGS)$(MOC\U CPPFLAGS)$<
ui\%.h:../ui/%.ui
$(MKDIR_P)$(@D)
@UIC@-o$@$<
qrc\%.cc:%.qrc
$(MKDIR_P)$(@D)
@RCC@-o$@$<
清洁本地:
rm-射频用户界面/包括/
bin_PROGRAMS=qthello
内置源=\
include/ui_mainwidget.h
qthello_CXXFLAGS=\
-I$(srcdir)/包括\
-I$(builddir)/包括
qthello_CPPFLAGS=$(QT_CPPFLAGS)
qthello\u LFLAGS=$(QT\u LDFLAGS)
qthello\u LDADD=$(QT\u LIBS)
qtu源=\
ui/moc_mainwidget.cc\
src/mainwidget.cc\
main.cc
请记住,必须将
AC\u PROG\u MKDIR\u p
添加到configure.ax
不知道此解决方案有多通用-在源代码树之外构建,等等但它仍然是一个非常有用的问答。它建立在Makefile.in
规则中的COMPILE
宏的原则之上。做得好:)
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