2009-07-02 7 views
4

J'ai un (partiel) fichier de projet qmake comme ceci:Comment forcer qmake à ne pas créer de liens symboliques à cibler lorsque TEMPLATE = lib?

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

Cela - atleast par défaut - créer une bibliothèque et quelques liens symboliques comme ceci:

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 .0 est le binaire de la bibliothèque, le reste d'entre eux ne sont que des liens symboliques. Ce que je voudrais archiver, c'est qu'aucun lien symbolique ne soit créé du tout ou que l'ordre soit différent de sorte que libwhatever.so soit le binaire actuel et que le reste soit les liens symboliques.

Répondre

5

Si vous remplacez la variable QMAKE_LN_SHLIB par un no-op, il ne créera pas les liens symboliques.

QMAKE_LN_SHLIB  = : 
0

Il pourrait aider si vous nous avez donné une indication quant à la raison pour laquelle il importe ...

Quant à savoir comment, vous pourriez envisager un script qui va réorganiser les choses à votre goût qui se déroule à la fin de la construction processus.

+1

Raison pour laquelle je veux un tel comportement est dû à certaines raisons d'emballage logiciel. Je sais comment les contourner, donc la raison n'est pas pertinente. La vraie raison est que qmake lui-même est tout simplement non documenté et j'ai posé cette question afin de savoir si ce comportement pouvait être reconfiguré sans "hacks". – rasjani

1

J'ai étudié les sources de qmake et les mkspecs, mais il semble que la génération des liens symboliques soit plutôt câblée. D'après ce que j'ai trouvé dans les sources, il semble que si vous ajoutez plugin à CONFIG, seule la bibliothèque sera générée, sans les liens symboliques.

Je ne peux pas vous dire si cela a d'autres effets secondaires, cependant. Mais il semble que ce soit la seule façon de se débarrasser des liens symboliques sans avoir à écrire un script qui court après la construction.

+0

Excellente solution de contournement! Tout comme vous le dites, il pourrait ajouter plus de drapeaux de liaison dans le binaire résultant. Comme atleast qt lui-même ne permet pas le mélange de plugins réels s'ils ont été compilés avec un ensemble différent de drapeaux arch qui continueraient probablement à fonctionner au niveau de l'os. J'ai besoin de vérifier cela .. – rasjani

+0

Merci! J'ai testé l'ajout de CONFIG + = plugin à quelques-uns de mes propres projets, mais il semble que cela provoque un comportement étrange. Je suggère d'écrire un script à nettoyer. En fait, j'utilise un "script de distribution" qui rassemble tout ce qui est requis dans une archive/image disque cible, de sorte que les liens symboliques ne posent pas vraiment de problème. – BastiBen

2

J'ai essayé de suggestion publié par swarfrat et il fonctionne, mais il émet une erreur avec un (plutôt utile) message:

Error 1 (ignored) 

Donc, voici une autre façon de supprimer les liens symboliques sans générer de erreurs:

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

Plus d'informations sur cette variable qmake se trouvent here.

0

Vous pouvez ajouter ci-dessous à votre fichier pro:

CONFIG += unversioned_libname unversioned_soname 

J'ai testé réussir.