003
13.08.2009, 17:56 Uhr
0xdeadbeef
Gott (Operator)
|
Die configure.ac ist ja im Wesentlichen ein Gerüst für ein Shell-Skript, du kannst da im Grunde an Shell-Code reinschreiben, was du lustig bist. Sinnvoll schiene mir allerdings die Benutzung des...ich schätze, AC_ARG_WITH ist hier am besten. Etwa so:
Code: |
AC_DEFUN([DINGO_ARG_WITH_DATABASE], [ AC_ARG_WITH([database], AS_HELP_STRING( [--with-database], [Setzen der benutzten Datenbank-Bibliothek [[default=$1]]] ), [dingo_database=$withval], [dingo_database=$1] )
case "$dingo_database" in mysql) CXXFLAGS="$CXXFLAGS -I/usr/include/mysql" LDFLAGS="$LDFLAGS -lmysql" ;; pgsql) CXXFLAGS="$CXXFLAGS -I/usr/include/pgsql" LDFLAGS="$LDFLAGS -lpg" ;; esac ])
DINGO_ARG_WITH_DATABASE(mysql)
|
Das fügt die Optionen jetzt für den gesamten Buildprozess hinzu. Ich würde dabei den AC_DEFUN-Kram in eine .m4-Datei in AC_CONFIG_MACRO_DIR legen und in der configure.ac nur DINGO_ARG_WITH_DATABASE(mysql) aufrufen, das ist übersichtlicher. Wenn du das in den einzelnen Makefile.ams gesondert behandeln willst, setz dir entsprechende Variablen zusammen und AC_SUBSTe sie, beispielsweise so:
Code: |
DB_CXXFLAGS="-I/usr/include/mysql" AC_SUBST(DB_CXXFLAGS)
|
und in der Makefile.am
Code: |
libbase_a_CXXFLAGS = $(DB_CXXFLAGS)
|
Was allerdings das Interface angeht - wenn in der main Details über die benutzte Datenbank bekannt sein müssen, kommst du um die Abhängigkeit nicht herum. In diesem speziellen Fall lässt sich das zwar leicht umgehen, etwa so:
C++: |
class MYSQL;
class cSQL { private: MYSQL *Connection; //... };
|
...und dann halt die mysql.h erst einbinden, wenn die Details wirklich gebraucht werden, prinzipiell ist es aber sinnvoll, solche Dinge vom Client-Code ganz abzutrennen. Ich würde cSQL wohl zu einer reinen Interface-Klasse machen und die eigentliche Drecksarbeit in abgeleiteten Klassen erledigen, beispielsweise cMySQL und cPgSQL. Auf die Art kannst du auch zur Laufzeit entscheiden, welche du benutzen willst. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 13.08.2009 um 17:57 Uhr von 0xdeadbeef editiert. |