Ich habe kürzlich (und dummerweise, da es hier eine einfache Lösung gibt, hatte ich --prefix=
die Option auf etwas anderes als die Standardeinstellung gesetzt /usr/bin
) configure
d und make
d ausgeführt gcc-4.9.1
, ohne die --prefix=
Option zu setzen. Ich möchte make
das Ganze nicht wirklich neu machen, da es ziemlich viel Zeit in Anspruch nehmen würde.
Mein /usr/bin/
Verzeichnis enthält bereits gcc-4.8.2
, wie vom Betriebssystem (Ubuntu-14.04) installiert. Der entscheidende Punkt ist, dass die vorhandenen symbolischen Links alle auf Dinge wie verweisen und auf den Befehl durch symbolische Links zu usw. gcc-4.8
ersetzt werden .make install
gcc-4.9
g++-4.9
Kann ich ein Argument übergeben make
, das besagt, dass bereits vorhandene symbolische Links nicht ersetzt werden sollen? Oder etwas Ähnliches?
Antwort1
Beachten Sie zunächst, dassdas Standardpräfixes sei denn, es wird ausdrücklich einer angegeben, ist dies meistens /usr/local. Daher ist das Überschreiben der Installation in /usr in Ihrem Fall möglicherweise nicht einmal ein Problem, obwohl es sicherlich später zu Verwirrung führen könnte, wenn ein GCC in /usr und ein anderer in /usr/local ist.
Obwohl ich nicht sicher bin, ob es speziell mit gcc-4.9.1 funktioniert (obwohl ich kaum einen Grund sehe, warum es nicht funktionieren sollte), configure
bietet autoconf (das das Skript generiert) Möglichkeiten fürÜberschreiben des Präfixes zum Installationszeitpunkt.
Zitat ausautoconf-Dokumentation, Abschnitt „Installationsnamen“:
Die portabelste Möglichkeit, die Installationsorte zu beeinflussen, besteht darin, der Konfiguration die richtigen Orte zu übergeben. Viele Pakete bieten jedoch eine oder beide der folgenden Abkürzungen zum Übergeben von Variablenzuweisungen an die Befehlszeile „make install“, um die Installationsorte zu ändern, ohne eine Neukonfiguration oder Neukompilierung durchführen zu müssen.
Bei der ersten Methode wird für jedes betroffene Verzeichnis eine Überschreibungsvariable bereitgestellt. Beispielsweise wählt „make install prefix=/path/to/alternate“ einen alternativen Speicherort und beeinflusst alle anderen Verzeichniskonfigurationsvariablen, die in Form von „${prefix}“ ausgedrückt wurden (oder anders ausgedrückt: Alle während der Konfiguration angegebenen Verzeichnisse, die nicht in Form des gemeinsamen Präfixes angegeben wurden, müssen bei der Installation überschrieben werden, damit die gesamte Installation verschoben werden kann). Der Ansatz, Makefile-Variablen für jede Verzeichnisvariable zu überschreiben, wird von den GNU Coding Standards gefordert und verursacht im Idealfall keine Neukompilierung. Einige Plattformen weisen jedoch bekannte Einschränkungen bei der Semantik gemeinsam genutzter Bibliotheken auf, die bei Verwendung dieser Methode eine Neukompilierung erforderlich machen, was insbesondere bei Paketen auffällt, die GNU Libtool verwenden.
Die zweite Methode beinhaltet die Bereitstellung der Variable „DESTDIR“. Beispielsweise wird „make install DESTDIR=/path/to/alternate“ allen Installationspfaden „/path/to/alternate“ vorangestellt. Der Ansatz der „DESTDIR“-Überschreibungen wird von den GNU Coding Standards nicht gefordert und funktioniert nicht auf Plattformen mit Laufwerksbuchstaben. Andererseits vermeidet er Neukompilierungsprobleme besser und funktioniert auch dann gut, wenn einige Verzeichnisoptionen bei der Konfiguration nicht in Bezug auf „${prefix}“ angegeben wurden. Für Pakete, die „DESTDIR“ unterstützen, sollte die Variable während der Konfiguration und „make all“ undefiniert bleiben und nur während „make install“ angegeben werden.
Alsomake install DESTDIR=/opt/gcc-4.8.2
sollentun Sie so ziemlich das, was Sie wollen. Abhängig von der gewünschten Verzeichnisstruktur müssen Sie die Dateien danach möglicherweise leicht verschieben, aber für den Anfang sollte es gut genug sein.
Beachten Sie, dass ich dies nicht getestet habe. Sie führen es auf eigene Gefahr aus.