На основе this link я создал систему сборки на основе Autotools, которая принимает файлы Qt UI и RSC без необходимости вызова QMAKE.Qt Automake отдельно включает в себя, ui, папки ресурсов
Я же хочу, чтобы отделить источник, заголовки и 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
@[email protected] [email protected] $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_%.h: %.ui
@[email protected] -o [email protected] $<
qrc_%.cc: %.qrc
@[email protected] -o [email protected] $<
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-cl файлы ass находятся в $ (srcdir), но просто перемещая их в нужные каталоги и изменяя ожидаемые строки в Makefile.am, не сглаживает желаемый результат. То есть, делая эти изменения не работает:
BUILT_SOURCES = include/ui_mainwidget.h
[ ... ]
qthello_SOURCES = \
src/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
Это происходит со мной, что некоторые изменения должны быть внесены в правила сборки для того, чтобы включать в себя, ЦСИ, пользовательский интерфейс -directories существуют в ($ builddir), и что передаются правильные входные файлы. Тем не менее я неопытен в написании таких правил сборки, и Google, похоже, не имеет ответа.
Есть ли какие-либо простые переносные способы достижения этого?
Не знаю, как это общее решение - здание за пределами исходного дерева и т. Д.? - но это по-прежнему очень полезное Q & A. Основывается на принципах макроса 'COMPILE' из правил' Makefile.in'. Красиво сделано :) –