Autoconf und m4 Makros Fragen
-
Hi habe einige Fragen zu autoconf bzw. um die m4 Macros.
1.) Wie kann ich selber herausfinden ob ein Library installiert ist wenn es dazu kein vordefiniertes Makro gibt ? In meinen Fall will ich überpüfen ob ImageMagick++ installiert ist.
Die Manpage und etc. von autoconf habe ich schon etwas durchgelesen irgendwie blicke ich da nicht so richtig durch.2.) Ich kontrolliere mittels AC_CHECK_LIB(qt, Qt) ob QT installiert ist kann man jetzt auch in den Makefiles.am irgendwie das Ergebnis als Variable haben (mein jetzt nicht im Quelltext) so dass man sagen kann wenn QT installiert ist das einige Dateien dann mitkompiliert werden.
3.) Kann man autoconf autoheader automake die erstellte Dateien in ein bestimmten Unterornder des Projektes packen. Damit diese nicht das root Verzeichnis des Projektes zumüllt.
Bei aclocal gibt es ja eine entsprechende Option.4.) Kann man die erstellten Objekt Dateien beim Kompilieren in ein bestimmten Ordner packen ? Sowie die erstellten Libs temporär in ein bestimmtes Verzeichnis bevor sie installiert werden ?
Wie man vielleicht sieht sind die Fragen etwas komplizierter mind. für mich. Alle Manpages der Tools oder Tutorials habe ich schon so gut wie durch nur wurden die Fragen nicht verständlich beantwortet.
Schonmal danke für die ein oder andere Antwort.MFG
xmarvel
-
Du musst natürlich auch Makefiles und Shell-Skripte verstehen, dann geht das alles irgendwie. Manches einfacher, manches schwieriger. Du musst dir einfach was dazu überlegen.
-
so was findest du raus, in dem du eigene kleine Shellskripte einbaust. In einem Skript habe ich um die LibXML2 zu suchen folgendes benutzt
dnl find the xml2 Headers AC_MSG_CHECKING([for libxml2 headers]) for xml2incdir in $xml2_include_path /usr/include /usr/local/include /usr/include/libxml2 /usr/local/include/libxml2; do if test -f "$xml2incdir/libxml/parser.h"; then if test -f "$xml2incdir/libxml/xmlmemory.h"; then xml2include="$xml2incdir" AC_MSG_RESULT($xml2include) break fi fi done if test -z "$xml2include"; then AC_MSG_RESULT([Not Found]) AC_MSG_ERROR([Couldn't find libxml2 Headers.]) fi CXXFLAGS="$CXXFLAGS -I$xml2include" AC_HEADER_SYS_WAIT
oder zum Suchen der XLib
AC_PATH_X AC_PATH_XTRA CFLAGS="$CFLAGS $X_CFLAGS" CXXFLAGS="$CXXFLAGS $X_CFLAGS" LDFLAGS="$LDFLAGS $X_LIBS $X_PRE_LIBS" AC_CHECK_LIB(X11,XOpenDisplay,,AC_MSG_ERROR([XOpenDisplay not found in -lX11]))
2. Du kannst in deiner Automake Datei AFAIK via @<variablename>@ auf Autoconf Variablen zugreifen
4. Jo, du kannst ja die CFLAGs und so weiter ohne Probleme anpassen
Wie man vielleicht sieht sind die Fragen etwas komplizierter mind. für mich. Alle Manpages der Tools oder Tutorials habe ich schon so gut wie durch nur wurden die Fragen nicht verständlich beantwortet.
am meisten lernst du Autoconf/Automake durch lesen anderer autoconf/automake Dateien und durch das lesen des Manuals (findest du auch Online bei gnu.org), dass hat mir sehr geholfen. So wirst du zwar kein Autoconf/Automake Profi (was sogar wahrscheinlich die Autotools so verufen macht, weil keiner wirklich damit umgehen kann ;)), aber du kommst zu dem Ziel.
Ansonsten gibt es nocht http://sources.redhat.com/autobook/
-
danke für die antwort.
Das erste Problem habe ich nun in den Griff bekommen.
Das zweite allerdings noch nicht muss man den Variable irgendwie anderes in der configure.in Deklarieren ?
habe jetzt in der Makefile.am folgendes stehen.if @gui@ SUBDIRS=gui fi SUBDIRS=bash ...
Und das es ein CFLAG gibt wusste ich nicht hab jetzt auch keins gefunden wo man die obj dateien in ein Ordner packen kann nur ne Option wo man in ein bestimmten Ordner suchen kann.
Habe aber in der autoconf Maunel ne Variable gefunden die man setzen kann mittels AC_SUBST (variable, [value]) leider will dieses nicht funktionieren.Wäre nett wenn du mir noch helfen würdest. Da ich da irgendwie feststecke somit kann ich nicht richtig weiterprogrammieren am eigentlichen Projekt.
Andere configure.in und Makefile.am habe ich mir schon angeguckt nur meistens sind es die Standard Situationen wo nur einfach alle Dateien kompiliert werden.
Aber nicht das bei einer bestimmten Option ein Teil nicht mitkompiliert wird oder andere komplexe Sachen.MFG
xmarvel
-
hmm, wie gesagt, ich hab nicht viel Erfahrung damit. Vielleicht ist deine if Abfrage nicht richtig, setz doch mal eine Variable auf irgend einen Wert und lass dir das mal in der Makefile ausgeben. Ansonsten muss der Weg ja irgend wo im Manual beschrieben sein.
-
h Jetzt habe ich auch das zweite Problem gelöst hab dafür das internet durchforst und man musste die Variable mit AC_SUBST setzen.
Fehlt mir nur noch wie ich bei qt die einzelnen headers die qt benutzen per moc schneiden und dann mitkompiliert wird.
Und noch das die obj und die libs irgendwo an einer stelle gelegt werden.
Naja werde weiter suchen wenn aber einer ne Lösung weiss immer her damitMFG
xmarvel