libtool gelöscht von ‚machen distclean‘
Frage
Ich habe kopiert libtool in mein Programm des Quellbaum mit dem Programm zu verteilen. Aber wenn ich laufe ‚machen distclean‘ libtool mit dem Rest des Restes der erzeugten Dateien gelöscht. Wie kann ich verhindern, dass nicht passiert?
Ich habe versucht Putting EXTRA_DIST = libtool
in Makefile.am aber das funktioniert nicht.
Hier ist im Grunde, was meine configure.ac aussieht.
AC_PREREQ(2.53)
AC_INIT( [program], [0.16], [program] )
AC_CONFIG_SRCDIR([src/c/program.c])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR(build-aux)
AM_INIT_AUTOMAKE( [-Wall -Werror foreign] )
m4_include(ax_pkg_swig.m4)
# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_PROG_SWIG
# Checks for libraries.
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T
# Checks for library functions.
AC_REPLACE_FNMATCH
AC_FUNC_MALLOC
AC_FUNC_STAT
AC_CHECK_FUNCS([regcomp strdup strtoull])
AC_CONFIG_FILES([
Makefile
src/c/Makefile
src/perl/Makefile
src/verilog/Makefile
])
AC_OUTPUT
Lösung
Du soll nicht libtool
in Ihr Programm Verzeichnis von Hand kopieren. Sie führen libtoolize
in der Bootstrap-Skript, das dies für Sie übernimmt. Ich nehme an, es ist mehr zu tun als nur das Kopieren von libtool für Sie, wie informiert auto dass er die Datei nicht löschen sollte. Hier ist ein Beispiel für eine Bootstrap-Skript:
#!/bin/sh
aclocal -I config &&
libtoolize --force --copy &&
autoheader &&
automake --add-missing --copy --foreign &&
autoconf &&
./configure -C "$@"
Dieses Skript wird traditionell entweder bootstrap
oder autogen.sh
genannt. Diese Namen sind nicht universell, nur fast so. Gerade vor ein paar Tagen kam ich über ein Projekt bootstrap.sh
mit, zum Beispiel.
Zu einem großen Teil der Name des Skripts ist eine Frage der Mode und Stil. Es ist nicht ganz oberflächlich, weil ein Teil des modernen Stils entfernt ein Zug ist configure
am Ende des Skripts aus ausgeführt wird. bootstrap
ist der neuere Name, so ein Skript mit dem Namen, dass weniger wahrscheinlich configure
am Ende laufen. Kapitel 8 des Autobook impliziert, dass dies der Fall ist, auch, aber ich habe über counterexamples laufen. (Das heißt, Projekte mit einem autogen.sh
Skript, das nicht configure
nicht nennen, und Projekte mit einem bootstrap
Skript, das zu tun.)
Meiner Meinung nach ist die Frage, ob die configure
Schritt am Ende aufzunehmen kommen, wie typische Anwendungsfälle sind das Projekt. Wenn fast jeder braucht Ihr Projekt bauen Baum Bootstrap den Standard configure
Flags definiert im Bootstrap-Skript übernehmen, oder vielleicht ein oder zwei einfache diejenigen hinzufügen, ist es in Ordnung configure
automatisch ausgeführt wird. Es ist am besten, es ein separater Anleitung Schritt zu machen, wenn eine Menge Leute brauchen starke Anpassungen zu tun. Ein Beispiel ist, wenn viele Benutzer sind Cross-Kompilierung Ihr Projekt. Die Art und Weise configure
zu bitten, dies zu tun, ist gut bekannt, während jemand, um herauszufinden, müßte die Bootstrap-Skript des Code lesen, wie die Optionen bis hin zu dem eingebetteten configure
Befehl übergeben bekommen.
Sie müssen an Sicherheit grenzender Wahrscheinlichkeit dieses Skript anpassen, um Ihr Projekt Bedürfnisse. Die wichtigste Sache zu lassen, wie sie ist die Reihenfolge der Operationen ist. Die Autotools sind empfindlich darauf. Sie müssen möglicherweise die Fahnen die Befehle gegeben ändern; die -I config
auf dem aclocal
Befehl ist nicht universell, zum Beispiel. Sie sind noch wahrscheinlicher Schritte müssen den Prozess hinzuzufügen, entweder diese gemeinsamen Schritte umgibt, oder vielleicht sogar verschachtelt mit ihnen.
Wie für die autoreconf
Option , habe ich noch ein Fan zu werden. Ich finde, dass die eingebaute in Annahmen, auf alle meine Projekte brechen, irgendwie. Wenn Ihr Projekt ein Moor-Standard-GNU-Stil-Projekt ist, kann es für Sie arbeiten.
Durch die Art und Weise, die AC_PROG_LIBTOOL
Makro veraltet . Sie sollten stattdessen mit LT_INIT
werden.
Andere Tipps
Eigentlich brauchen Sie nicht alles, was aclocal und libtoolize und autoheader anrufen und ...
Rufen Sie
$ autoreconf -i
und autoreconf läuft aclocal, libtoolize (wenn es libtool Makros in configure.ac sind), auto und autoconf (wenn configure.ac auto beinhaltet). Alle entsprechenden Dateien, die auf Ihrem Quellbaum hinzugefügt werden müssen, wird es kopiert werden, darunter ltmain.sh.2
ich in der Regel eine gewisse Ausführlichkeit hinzufügen (-v) und statt nur die Dateien zu kopieren, ich Symlink sie, was in meinem Standard-Aufruf von
$ autoreconf -vis
Die „libtool“ Datei, die durch ein „konfigurieren“ run ist spezifisch für das System der configure laufen passiert auf und somit wird natürlich wieder gereinigt werden, indem man „make distclean“.