PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Automake: Wie Standard-CFLAGS ändern?



shazza
27-02-2005, 19:30
Hallo,

ich baue mir gerade um eine Anwendung ein Autotools-Gerüst. Was ich leider nicht verstehe - trotz Autotools-Buch und Google-Suche -, ist, wie man die Standard-CFLAGS abändern kann?

Das Programm wird beim Aufruf von make insbesondere mit -O2 -g erstellt.

Ich kann zwar in das Makefile.am AM_CFLAGS = <irgendwas> reinsetzen, diese Flags werden aber nur hinzugefügt und ersetzen nicht die bestehende Definition.

Ebensowenig scheint AC_SUBST([AM_CFLAGS], [<irgendwas]) in der configure.in etwas zu bringen.

Mir scheint das ein elementares Problem zu sein, aber die Lösung dazu versteckt sich in jeder Doku - oder ich sehe den Wald vor lauter Bäumen nicht.

Danke für Hinweise!

RapidMax
28-02-2005, 22:37
Normalerweise überlässt man Optimierungen dem Benutzer. Dieser kann einfach mit
./configure CFLAGS='-O3 -fhau-rein-die-sau' seine Optimierungen setzen. Natürlich kannst du die CFLAGS auch direkt in configure.in setzen (z.B. am Anfang):
CFLAGS="$CFLAGS -O4 -fgieb-alles"

Ich sehe das Konservativ und würden, wenn die Optimierung schon vorgegeben wird, erstens mal vorsichtig optimieren (nicht mehr als -O2) und ev. nur bei bekannten Compilern (gcc, intel etc.). Und auf jeden Fall dem Benutzer eine Möglichkeit geben, die Optimierungen auszuschalten:

AC_ARG_WITH(optimization,
[ --with-optimization=yes/no Compile with optimizations (default=yes)],
, with_optimization=yes)
if test "$with_optimization" = "yes"; then
CFLAGS="$CFLAGS -O5 -fassume-no-branches"
fi

Ev. gibt es auch schon fertige Makros die automatisch die optimalen Optimierungen wählen. Zudem wählt mein autoconf 2.59 bereits -O2 automatisch.
Eine weitere Möglichkeit ist übrigens bei automake binary-spezifische Optimierungen anzugeben:
myprog_CFLAGS = -Ooo -fkann-nid-mehr

Gruss, Andy

shazza
28-02-2005, 23:24
Hallo Andy,

configure.in kann wohl nicht gemeint sein zum direkten Setzen von CFLAGS - das ist ja weder ein autoconf- noch automake-spezifisches Makro.

Es gibt mir nicht darum, Optimierungsvoodoo zu betreiben, aber insbesondere die Debug-Symbols möchte ich standardmäßig nicht haben. Außerdem soll beispielsweise "position independent code" produziert werden. Ich halte es nicht für sinnvoll, daß der User sich mit den notwendigen Flags auseinandersetzen muß.

Setze ich "foo_CFLAGS = $FLAGS", sucht automake (1.9) nach ./compile - irgendeine Ahnung, was es damit auf sich hat?

RapidMax
03-03-2005, 12:08
configure.in kann wohl nicht gemeint sein zum direkten Setzen von CFLAGS - das ist ja weder ein autoconf- noch automake-spezifisches Makro.
Autoconf ist eine Sammlung von M4 Makros, welche die configure.in zu einem Shellscript configure expandieren. Du kannst sehr wohl normalen Shellcode in die configure.in reinpacken. Das es nicht die sauberste Lösung ist einfach ein CFLAGS='-fhau-rein' zu setzen versteht sich von selbst.


Es gibt mir nicht darum, Optimierungsvoodoo zu betreiben, aber insbesondere die Debug-Symbols möchte ich standardmäßig nicht haben.
configure sollte den Parameter -g nicht hinzufügen. Ich konnte das nicht nachvollziehen.


Außerdem soll beispielsweise "position independent code" produziert werden. Ich halte es nicht für sinnvoll, daß der User sich mit den notwendigen Flags auseinandersetzen muß.
Ich auch nicht. Wenn du libtool verwendest, dann sollte AFAIK erkannt werden ob mit oder ohne PIC gearbeitet wird. Sonst musst du es wie beschrieben von Hand hinzufügen.

Gruss, Andy