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
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top