【发布时间】:2016-04-08 12:44:10
【问题描述】:
基于this link,我创建了一个基于 Autotools 的构建系统,它无需调用 QMAKE 即可接受 Qt UI 和 RSC 文件。
然而,我希望按以下方式将源文件、标题和 ui 文件分隔到文件夹中:
${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
我的 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 类文件位于 $(srcdir) 中,这可以正常工作,但只是将它们移动到所需的目录并更改 Makefile.am 中的预期行并不会产生所需的结果。也就是说,做这些改变是行不通的:
BUILT_SOURCES = include/ui_mainwidget.h
[ ... ]
qthello_SOURCES = \
src/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
在我看来,必须对构建规则进行一些更改,以确保 $(builddir) 中存在 include、src、ui 目录,并且传递正确的输入文件。然而,我在编写此类构建规则方面缺乏经验,谷歌似乎没有答案。
有没有简单的便携方法来实现这一点?
【问题讨论】: