
Wir haben ein Makefile zum Kompilieren des Treibers einer Netzwerkschnittstelle. Wenn wir das Makefile in einer Ubuntu 9.04-Installation aufrufen, müssen wir nur „make“ aufrufen. Wenn wir das Makefile jedoch in einer Ubuntu 10.04-Installation aufrufen, müssen wir „sudo -s make“ aufrufen.
Wenn wir in Ubuntu 9.04 „sudo -s make“ aufrufen, schlägt die Kompilierung fehl. Und wenn wir in Ubuntu 10.04 „make“ aufrufen, schlägt die Kompilierung ebenfalls fehl.
Obwohl die Kompilierung in beiden Ubuntu-Versionen durch die Ausgabe oder Nichtausgabe des Bits „sudo -s“ durchgeführt werden kann, möchten wir ein einzelnes .sh-Skript haben, das das Makefile erfolgreich aufruft, unabhängig davon, auf welcher Ubuntu-Version es ausgeführt wird. Gibt es Unterschiede in der Art und Weise, wie sudo -s in 9.04 im Vergleich zu 10.04 behandelt wird? Und wenn ja, was ist die beste Lösung, um sicherzustellen, dass beide Versionen in einem einzigen .sh-Skript beim Aufruf von make berücksichtigt werden?
Antwort1
Der make
Befehl soll den Quellcode kompilieren. Das ist eine Aufgabe, die keine Administratorrechte erfordern sollte. Für eine systemweite Installation sind Root-Rechte erforderlich. Das bedeutet in Ihrem Fall, dass das Makefile nicht korrekt ist. Ich weiß nicht, was es tut, aber es soll es nicht tun, da es Root-Rechte erfordert.
Stellen Sie sich folgendes Szenario vor: Ein Benutzer möchte Software installieren. Er/Sie startet
./configure --prefix=/home/joe/bin/usr && make && make install
Der make
Befehl darf keinen Root-Zugriff erfordern, dies würde vermeidenbeliebigBenutzer, der Ihr Programm installiert. Sie erwähnen, dass es sich um einen Netzwerktreiber handelt, der normalerweise von Nicht-Root-Benutzern nicht verwendet werden muss. Sie sollten Ihren Build trotzdem reparieren.