2009-01-01 21 views
2

Je possède ce petit projet Qt avec un fichier de projet comme celui-ci:Pourquoi le nom de la bibliothèque obtient un 0 supplémentaire dans son nom?

TEMPLATE = lib 
TARGET = record32 
VERSION = 0.0.1 
DEPENDPATH += . 
INCLUDEPATH += . 

CONFIG += shared 
SOURCES += recorder.cpp 
HEADERS += recorder.h 

Lorsque je compile une bibliothèque de par qmake && nmake, il en résulte dans les fichiers

record32.obj 
record320.lib 
record320.dll 
... 

Pourquoi est-ce plus 0 ajouté aux noms lib et dll?

Les makefiles générés semblent pas être annexant mais simplement supposer qu'il en Makefile.Release il dit seulement:

####### Files 

SOURCES  = recorder.cpp release\moc_recorder.cpp 
OBJECTS  = release\recorder.obj release\moc_recorder.obj 
DIST   = 
QMAKE_TARGET = recorder 
DESTDIR  = release\ #avoid trailing-slash linebreak 
TARGET   = record320.dll 
DESTDIR_TARGET = release\record320.dll 

Comment puis-je l'empêcher et le nom de mes bibliothèques que je veux?

(Notez que fixer manuellement le makefile.release n'est pas une solution accetable)

Répondre

6

Il vient de la première partie de la version. Le "lib" TEMPLATE l'ajoute.

IMO c'est une bonne idée de l'inclure dans le nom de la bibliothèque, car elle évite l'infâme "DLL Hell" qui arrive sur Windows où cette convention n'est pas suivie de manière cohérente ... En nommant les fichiers de bibliothèque pour inclure la version majeure nombre, les utilisateurs peuvent avoir plusieurs versions installées et les programmes utiliseront les versions correctes lors de l'exécution. La version DLL ne doit pas forcément être la même que la version de l'ensemble du projet. Sous Linux et OSX, les versions sont ajoutées au nom de fichier (par exemple librecorder.so.0.0.1)

[Si vous utilisez Visual C++, ajoutez toujours une balise indiquant quelle version de Visual CI est utilisée depuis le code généré par les différentes versions Vous pouvez peut-être simplement omettre la définition de VERSION pour désactiver ce comportement, mais je ne peux pas le vérifier maintenant pour Windows (sous Linux, où les bibliothèques partagées ont toujours des numéros de version, cela suppose simplement . Version 1.0.0)

+0

Je l'ai testé et oui, commentant la version fait disparaître le 0. Vous avez également donné un bon raisonnement pourquoi il est là, alors peut-être que ce n'est pas une mauvaise chose en plus d'utiliser une version majeure, le nom ne change pas entre 0.0.1 et 0.9.9 et donc, le "DLL enfer" pourrait juste aussi bien arriver .. Merci! – Tuminoid

3

Essayez ceci:

CONFIG += skip_target_version_ext 
+0

Merci _so_ beaucoup ... DLL-HELL suce, mais être bloqué suce plus. –

0

utiles trick:

VERSION = 0.0.1 
win32:TARGET_EXT = .dll 

Avec cela, vous obtiendrez:

  • sur Linux: librecord.so, ..., librecord.so.0.0.1
  • sous Windows: enregistrement. dll