2009-07-02 6 views
4

Ich habe eine (teilweise) qmake-Projektdatei wie folgt aus:Wie erzwinge qmake nicht symbolische Links zum Ziel zu erstellen, wenn TEMPLATE = lib?

libwhatever.so -> libwhatever.so.0.1.0 
libwhatever.so.0 -> libwhatever.so.0.1.0 
libwhatever.so.0.1 -> libwhatever.so.0.1.0 
libwhatever.so.0.1.0 

libwhatever.so.0.1:

TEMPLATE=lib 
TARGET=whatever 
SOURCES=whatever.cpp 
HEADERS=whatever.h 

Dies wird - - atleast immer standardmäßig über eine Bibliothek und ein paar symbolische Links wie erstellen .0 ist das eigentliche Bibliotheks-Binary, der Rest sind nur symbolische Links.

Was ich archivieren möchte, ist, dass keine symbolischen Links überhaupt erstellt werden oder die Reihenfolge, was andersherum ist, so dass libwhatever.so wäre die eigentliche binäre und Ruhe sind die symbolischen Links.

Antwort

5

Wenn Sie die QMAKE_LN_SHLIB Variable mit einem No-op außer Kraft setzen, wird es nicht die symbolischen Links machen.

QMAKE_LN_SHLIB  = : 
0

Es könnte helfen, wenn Sie uns einen Hinweis, gab, warum es wichtig ist ...

Was, wie Sie vielleicht ein Skript betrachten, die Dinge nach Belieben neu ordnen wird, die am Ende des Build ausgeführt wird verarbeiten.

+1

Grund, warum ich ein solches Verhalten wollen, ist zu einigen Softwarepaketierung Gründe zurückzuführen. Ich weiß, wie ich diese umgehen kann, also ist der Grund eigentlich irrelevant. Der wahre Grund ist, dass Qmake selbst ist einfach zu undokumentiert, und ich habe diese Frage um, ob dieses Verhalten ohne „Hacks“ neu konfiguriert werden, um herauszufinden kann. – rasjani

1

studierte ich die Qmake Quellen und die mkspecs, aber es scheint, dass die Erzeugung der symbolischen Links eher fest verdrahtet ist.

Aus was ich in den Quellen gefunden habe, scheint es, dass, wenn Sie plugin zu CONFIG hinzufügen, nur die Bibliothek generiert wird, ohne die symbolischen Links.

Ich kann Ihnen nicht sagen, ob so andere Nebenwirkungen hat zu tun, wenn. Aber es scheint die einzige Möglichkeit zu sein, die symbolischen Links loszuwerden, ohne ein Skript schreiben zu müssen, das nach dem Aufbau läuft.

+0

Ausgezeichnete Problemumgehung! Alles, was Sie sagen, könnte weitere Verknüpfungsflags in die resultierende Binärdatei einfügen. Wie atleast qt selbst haben nicht erlaubt den tatsächlichen Plugins Mischen, wenn sie mit anderem Satz von Bogenfahnen zusammengestellt, die propably noch einen auf der OS-Ebene arbeiten würde. Ich muss dies überprüfen .. – rasjani

+0

Danke! Ich habe das Hinzufügen von CONFIG + = Plugin zu einigen meiner eigenen Projekte getestet, aber es scheint, dass es merkwürdiges Verhalten verursacht. Ich schlage vor, ein Skript zu schreiben, um aufzuräumen. Tatsächlich verwende ich ein "Verteilungsskript", das alles, was benötigt wird, in ein Zielarchiv/Disk-Image packt, so dass symbolische Links kein echtes Problem darstellen. – BastiBen

2

Ich habe versucht, von swarfrat gebucht Vorschlag und es funktioniert, aber es gibt einen Fehler mit einer (eher hilfreich) Nachricht:

Error 1 (ignored) 

So, hier ist ein weiterer Weg, um die Symlinks zu löschen ohne Erzeugung Fehler:

unix: QMAKE_POST_LINK = find $$DESTDIR -maxdepth 1 -type l -exec rm -f {} \; 

Weitere Informationen zu diesem qmake Variable kann here finden.

0

Sie können unten auf Ihre Pro-Datei hinzu:

CONFIG += unversioned_libname unversioned_soname 

ich erfolgreich getestet haben.