Basierend auf this link, erstellte ich ein Autotools-based Build-System, das Qt UI und RSC-Dateien akzeptiert, ohne QMAKE aufrufen zu müssen.Qt Automake separate Include, ui, Ressourcenordner
ich aber möchte die Quelle, Kopf- und ui-Dateien in Ordnern in der folgenden Art und Weise trennen:
${srcdir}
├── Makefile.am
├── main.cc
├── include
│ └── mainwidget.h
├── src
│ └── mainwidget.cc
└── ui
└── mainwidget.ui
Und das Build-Verzeichnis auf folgende Weise bestellt haben
${builddir}
├── include
│ └── ui_mainwidget.h
├── Makefile
├── main.o
├── mainwidget.o
└── moc_mainwidget.o
Meine Makefile.am sieht derzeit so aus:
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
Das funktioniert gut, wenn die ui-cl ass-Dateien befinden sich in $ (srcdir), aber sie einfach in die gewünschten Verzeichnisse zu verschieben und die erwarteten Zeilen in Makefile.am zu ändern, führt nicht zum gewünschten Ergebnis. Das heißt, diese Änderungen zu tun nicht:
BUILT_SOURCES = include/ui_mainwidget.h
[ ... ]
qthello_SOURCES = \
src/moc_mainwidget.cc \
src/mainwidget.cc \
main.cc
Es fällt mir ein, dass einige Änderungen an den Build-Regeln getroffen werden müssen, um sicherzustellen, dass die sind, src, ui -directories in $ existieren (builddir), und dass die richtigen Eingabedateien übergeben werden. Ich bin jedoch unerfahren beim Schreiben solcher Build-Regeln und Google scheint nicht die Antwort zu haben.
Gibt es irgendwelche tragbaren Möglichkeiten, dies zu erreichen?
Wissen Sie nicht, wie allgemein diese Lösung ist - Gebäude außerhalb des Quellbaums, usw.? - Aber es ist immer noch eine sehr nützliche Frage und Antwort. Baut auch nach den Prinzipien des 'COMPILE'-Makros von' Makefile.in' auf. Schön gemacht:) –