PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Autotools zweites Verzeichnis einbinden



dml
24-09-2010, 17:38
Hi!

Ich bräuchte bitte mal wieder Eure Hilfe. Ich habe ein Projekt mit den Autotools erstellt, funktioniert wunderbar, und möchte jetzt noch ein Verzeichnis images installieren lassen. Deshalb habe ich die Makefile.am und configure.ac im Hauptverzeichnis geändert:

configure.ac


...
AC_CONFIG_FILES([ Makefile
images/Makefile
src/Makefile
])
...


Makefile.am


SUBDIRS = images src


und im images/Makelife.am


imagesdir=$(datadir)/images
images_DATA = \
photo.png


Doch wenn ich dann make ausführen möchte bekomme ich die Fehlermeldung:


Making all in images
Entering Directory .../images
Für das Ziel >>all<< ist nichts zu tun


Was mache ich falsch? Könnt ihr mir bitte dabei helfen.

viele Grüße
dml

undefined
25-09-2010, 16:46
Läuft "autoreconf -fvi" ohne Fehler durch?

dml
26-09-2010, 10:04
Eigentlich ja

autoreconf -ifv
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
autoreconf: Leaving directory `.'

Das ist ja auch was mich verwundert, wenn ich kein zweites Verzeichnis hinzufüge, funktioniert alles wunderbar, doch so bricht es bei make ab.

Ich habe als Beispiel auch gftp genommen, die machen es nicht anders, keine Angabe von all irgendwo, nur das sie die Optionen für das Debianpaket schon hinzugefügt haben.

undefined
26-09-2010, 18:21
Ich glaube AC_OUTPUT fehlt.
Setze hinter AC_CONFIG_FILES das AC_OUTPUT in die nächste Zeile.
An sonsten mal den Code von configure.ac zeigen.

dml
27-09-2010, 10:44
Nein leider nicht, aber wäre schön gewesen. :D
Vorab schon mal ein großes Dankeschön, das du mir dabei hilfst, vorallem auch am Wo.ende!



# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
# m4_include(m4/autotroll.m4)

AC_PREREQ(2.61)
AC_INIT(program, 1.0.0, host@local)
AC_CONFIG_SRCDIR([src/settings.cpp])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])

# Checks for programs.
AC_LANG([C++])
AC_PROG_CXX
#AC_PROG_CC
#AC_PROG_LIBTOOL
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB

AC_CHECK_LIB(QtCore,qt_addObject,[],[AC_MSG_ERROR("Libary QtCore not found!")])
AC_CHECK_LIB(QtGui,_init,[],[AC_MSG_ERROR("Libary QtGui not found!")])
AC_CHECK_LIB(QtWebKit,_init,[],[AC_MSG_ERROR("Libary QtWebKit not found!")])


#PKG_PROG_PKG_CONFIG(0.20)

#PKG_CHECK_MODULES(Qt, [QtCore >= 4.3, QtGui >= 4.3] )
#AC_SUBST(Qt_CFLAGS)
#AC_SUBST(Qt_LIBS)

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE

# Checks for library functions.
AC_HEADER_STDC
AC_CHECK_FUNCS([mkdir rmdir])

AC_CONFIG_FILES([Makefile
images/Makefile
src/Makefile])
AC_OUTPUT

undefined
27-09-2010, 17:26
Auch wenn einige Macros veraltet sind so sollte das funktionieren.
Das einzige was mir noch aufgefallen ist, das im Code des ersten posts die Tabulaturen im Makefile fehlen. Nach geslashten Zeilenumbrüchen sollte immer mindestens ein TAB folgen.

Die Fehler Meldung "Für das Ziel >>all<< ist nichts zu tun" besagt eigentlich auch nichts falsches so lange keine Quellen oder Sourcen übersetzt werden sollen. Ein "make DESTDIR=/tmp install" sollte also deine Images nach "Auch wenn das kein Linux Standard ist ;)" $(datadir)/images Installieren.

PS: Du verwendest Qt Bibliotheken oder dein Programm soll ein auf Qt Basiertes Programm sein. Hier ist Eigentlich cmake die bessere Wahl weil sie Macros für den moc und uic Compiler anbieten. Mit Autoconf ist das etwas komplizierter und erfordert einiges an Kenntnis über die Automake Eigenheiten.

dml
30-09-2010, 16:45
Die Tabs haben leider auch nicht geholfen und habe ich momentan leider keine Zeit mehr zum Weiterarbeiten. cmake will ich eigentlich erstmal nicht verwenden, da ich erst einmal die Autotools richtig können will, so kann ich dann wenigstens eines und zwei nur ein bisschen. Mit Qt binn ich eigentlich gut durchgekommen.
Vielen Dank für Deine Unterstützung!

dml
11-11-2011, 11:16
Ja das stimmte, es war damals für ein Qt-Programm gedacht. Doch auch generell tut sich mir inzwischen die Frage auf, wie ich .so Bibliotheken richtig mit einbinde. _CXXFLAGS sind glaube ich eher Flickschusterei. Und wenn ich _LIBADD verwende, fehlen mir ja immer noch die Header zu den Bibliotheken und will ich auch keine Bibliothek mit Libtools erstellen. Doch wie binde ich diese korrekt ein, bzw. mit _HEADERS jede einzelne qt Hederdatei aufzurufen, ist dann doch recht umfangreich.

Bzw:


# Makefile.am

bin_PROGRAMS = \
pointergui

pointergui_SOURCES = \
arraynormal.h \
arraynormal.cpp \
buttonbox.h \
buttonbox.cpp \
colorbox.h \
colorbox.cpp \
klasse.h \
klasse.cpp \
main.cpp \
mask.h \
mask.cpp \
pointerarray.h \
pointerarray.cpp \
pointerclass.h \
pointerclass.cpp \
pointernormal.h \
pointernormal.cpp \
stacklayout.h \
stacklayout.cpp \
variablenormal.h \
variablenormal.cpp \
moc_colorbox.cpp

pointergui_LDADD = \
-lQtCore \
-lQtGui

pointerguidir = /usr/share/pointer

nodist_pointergui_HEADERS = \
HEADERS/QT \
HEADERS/QTCore \
HEADERS/QTGui

#pointergui_CXXFLAGS = \
# -I/usr/include/qt4/QtCore \
# -I/usr/include/qt4/QtGui \
# -I/usr/include/qt4 \
# -lQtCore \
# -lQtGui


Fehler:


make[3]: Entering directory `/home/kanotix/autotools/source/qt'
g++ -DHAVE_CONFIG_H -I. -I../.. -g -O2 -MT arraynormal.o -MD -MP -MF .deps/arraynormal.Tpo -c -o arraynormal.o arraynormal.cpp
In file included from arraynormal.h:7,
from arraynormal.cpp:1:
mask.h:6:18: error: QLabel: Datei oder Verzeichnis nicht gefunden

undefined
11-11-2011, 18:22
Fehlender Pfad zur STL Header Definition.
Verwende die PKG_CONFIG Macros in deiner configure.*
Im Anhang findest du eine von mir erstellte Macro.
In der Configure z.B. einfach:


dnl -----------------------------------------------
dnl QT4 >= 4.5.0 : http://www.trolltech.com
dnl -----------------------------------------------
AC_CHECK_QT4(["4.4.3"],"QtCore QtGui QtXml QtDBus QtNetwork QtSvg")

In der Makefile.am folgendes einfügen:



RCC = @RCC@
MOC = @MOC@
MOC_INCDIR = @srcdir@

projektname_CXXFLAGS = @QT_CFLAGS@
projektname_CPPFLAGS = -I. -I@top_srcdir@/src

BUILT_SOURCES = \
qrc_beispiel.cpp \
moc_beispiel.cpp

nodist_projektname_SOURCES = $(BUILT_SOURCES)

moc_%.cpp: %.h
$(MOC) -I${MOC_INCDIR} -o $@ $<

qrc_%.cpp: %.qrc
$(RCC) -name $* -o $@ $<

CLEANFILES = $(BUILT_SOURCES)

dml
11-11-2011, 21:26
Erst einmal ein großes Dankeschön! Doch werden wohl noch ein paar Tage vergehen, bis ich es ein mein Projekt eingearbeitet habe. Doch danach dürften die Autotools mir keine Probleme mehr, auf dem Weg zu einem fertigen Programm, bereiten.