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:
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:
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.
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.
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.