[AutoConf/AutoMake] Conditional werkt niet in Makefile

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • keavis
  • Registratie: Juli 2008
  • Laatst online: 20:00
DevSchuurders,

Ik ontwikkel software op en voor Linux en heb altijd alle makefiles met de hand geschreven. Dit ging altijd best goed tot het moment dat ik ook software voor embedded systemen ging maken en moest gaan cross-compilen. Nu blijken eigengemaakte makefiles niet zo goed te werken en ben ik aan het overstappen op AutoConf/AutoMake gegenereerde makefiles.

Ik ontwikkel op Kubuntu 11.04 met autoconf versie 2.67 en automake versie 1.11.1.

Ik heb nu voor een klein test-project een configure.ac en een Makefile.am file gemaakt. Vervolgens gebruik ik autoreconf om van configure.ac een configure-script te maken. Ten slotte wordt bij het aanroepen van configure van de Makefile.am een Makefile gemaakt. Dit werkt allemaal prima.

Nu wil ik een optie aan configure toevoegen waarmee ik debug-opties kan enablen en disablen tijdens het compileren van de software. Ik heb op internet gezocht en heb de volgende constructie aan de configure.ac file toegevoegd:

code:
1
2
3
4
5
6
# check for --enable-debug
AC_ARG_ENABLE([debug],
              [AS_HELP_STRING([--enable-debug],[build application with debug information])],
              [debug=${enableval}],
              [debug=no])
AM_CONDITIONAL([APPDEBUG], [test "x${debug}"=xyes])


De APPDEBUG conditional gebruik ik in de Makefile.am om zo extra debug opties aan de CFLAGS te kunnen doorgeven. Hiervoor heb ik het volgende toegevoegd aan Makefile.am toegevoegd:

code:
1
2
3
4
5
AM_CPPFLAGS = -Wall -Wextra -Wno-deprecated

if APPDEBUG
AM_CPPFLAGS += -ggdb -O0
endif


Helaas werkt dit niet...

Als ik nu autoreconf && ./configure && make clean && make uitvoer dan krijg ik toch de debug flags tijdens compileren. Als ik autoreconf && ./configure --enable-debug && make clean && make uitvoer dan krijg ik ook de debug flags tijdens compileren.

De debug variabele wordt in de configure.ac file correct gezet, want verderop in de configure.ac heb ik het volgende staan en dat geeft telkens de juiste output bij de verschillende configure opties.

code:
1
2
3
4
5
6
echo "debug = ${debug}"
if [[ "x$debug" = "xyes" ]]; then
echo "Debug : Enabled"
else
echo "Debug : Disabled"
fi


Ik heb al geprobeerd om de xyes uit de configure.ac file te quoten, ik heb de naam van de conditional gewijzigd om er zeker van te zijn dat die niet ergens anders ook al gebruikt is maar dat helpt niet.
Ook het toevoegen van een TAB voor de AM_CPPFLAGS = -Wall -Wextra -Wno-deprecated regel helpt niet, al heeft dat tot gevolg dat de flags nooit gezet worden ongeacht of ik --enable-debug meegeef aan configure.

Ziet iemand wat ik hier fout doe? Of heeft iemand een idee hoe ik dit kan debuggen? Zoals gezegd ben ik pas net begonnen met autotools dus zeker geen expert. Ik ben echter al wel een dag naarde oplossing aan het zoeken en weet eigenlijk niet hoe nu verder.

Jeroen.

Acties:
  • 0 Henk 'm!

  • keavis
  • Registratie: Juli 2008
  • Laatst online: 20:00
Het is opgelost!

Voor de geintresseerden:

Het heeft nog een dag zoeken gekost om erachter te komen dat de AC_OUTPUT macro het laatste moet zijn in de configure.ac file. Als die niet het laatste is gaan =somminge= substituties mis...

Maar goed, het werkt nu!