Die ismail-Lösung ist ein gängiger Ansatz, der jedoch einige schwerwiegende Probleme aufweist. Wenn der Benutzer versucht, einen Debug-Build zu erstellen, indem er './configure --enable-debug' ausführt, setzt das configure-Skript CFLAGS auf '-gO2' und das Makefile verwendet '-g3 -O0 ... -g -O2 'beim Erstellen ausführbarer Dateien. In diesem Fall wird gcc -O2 verwenden und einige Compiler werden wegen der widersprüchlichen -O-Optionen abgebrochen. Beide Szenarien sind nicht das erwartete Verhalten.
Das Bauen mit Debug-Symbolen oder nicht ist NICHT etwas, um das sich der Projektbetreuer kümmern sollte. Dies ist ein Problem für den Benutzer. Wenn Sie ein Projekt haben und einen Debug-Build oder einen Release-Build erstellen möchten, sollten Sie zur Konfigurationszeit verschiedene Optionen verwenden. Zum Beispiel
$ mkdir debug
$ mkdir release
$ cd debug && /path/to/configure --prefix=/dbg \
CPPFLAGS=-DDEBUG CXXFLAGS="-g -O0" && make && make install
$ cd ../release && /path/to/configure CPPFLAGS=-DNDEBUG && make && make install
Dies installiert ein Debug-Build in/dbg/bin und eine 'Freigabe' installieren in/usr/local/bin
Sie können aber auch erheblich die Langwierigkeit der notwendigen Eingabe reduzieren mithilfe einer CONFIG_SITE-Datei. Zum Beispiel können Sie tun:
echo 'CPPFLAGS=-DDEBUG CFLAGS="-g -O0"' >> /dbg/share/config.site
und dann alle zukünftigen Anrufungen von ‚konfigurieren prefix =/DBG‘ werden automatisch die Einstellungen CPPFLAGS und CFLAGS erben, ohne dass auf der Kommandozeile angegeben werden.
Wenn Sie als Paketverwalter dem Benutzer eine einfache Möglichkeit zum Erstellen einer "Debug-Version" bieten möchten, ist es durchaus akzeptabel, ein Skript in die Distribution aufzunehmen, das das configure-Skript mit den entsprechenden Argumenten aufruft und ruft make && make install
auf, aber es gibt absolut keine Notwendigkeit, Ihre Autotoolmetafiles mit solchem cruft zu verunreinigen. Es gehört einfach nicht dorthin. Und seien Sie gewarnt, viele Pakete haben versucht, --enable-debug
hinzuzufügen, die einfach falsch sind.Wenn der Benutzer configure CFLAGS="-g -O0"
aufruft, aber einen Build erhält, der unerwartete Flags anwendet, haben Sie einen Fehler und Ihr Paket ist gebrochen. Dies ist eine allzu alltägliche Erfahrung, und wenn Sie ein Paket (derzeit über tmux
und curl
), in dem der Benutzer nicht erhält, was eine vernünftige Person eine "Debug-Build" nach Aufruf configure CFLAGS="-g -O0"
aufrufen würde, dann ist Ihr Paket gebrochen.
Ein wichtiger Punkt, der bei der Wartung eines Pakets mit den Autotools immer beachtet werden muss, ist, dass der Benutzer möglicherweise eine völlig andere Werkzeugkette verwendet als Sie. Es ist durchaus möglich, dass die Werkzeugkette des Benutzers -DMAKE_IT_A_DEBUG
oder oder -I/usr/banana-split/debug/build/with/georges/headers
erfordert. Vielleicht wird es -O145
oder -Q
an den Compiler oder -debug
übergeben an den Linker übergeben müssen, oder ... alles. Als Betreuer haben Sie einfach nicht die notwendigen Informationen, um den Ausdruck "debug build" für alle Benutzer sinnvoll zu machen. Versuchen Sie es nicht, denn Sie könnten die Software für bestimmte Benutzer unbuildbar machen.
Bitte ändern Sie die akzeptierte Antwort von ismall des William Pursell Jahren. Die angenommene Antwort ist falsch. –