3 votes

Pourquoi le nom de la bibliothèque obtient-il un 0 supplémentaire dans son nom ?

J'ai ce petit projet Qt avec un fichier projet comme celui-ci :

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

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

Lorsque je compile une bibliothèque à partir de celui-ci par qmake && nmake il en résulte des fichiers

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

Pourquoi ce 0 supplémentaire est-il ajouté aux noms des lib et des dll ?

Les makefiles générés ne semblent pas l'ajouter, mais plutôt le supposer, en Makefile.Release ça dit juste :

####### 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'éviter et nommer mes bibliothèques comme je le souhaite ?

(Notez que corriger manuellement le makefile.release n'est pas une solution acceptable).

7voto

Reed Hedges Points 995

Il provient de la première partie de VERSION. Le TEMPLATE "lib" l'ajoute.

C'est une bonne idée de l'inclure dans le nom de la bibliothèque, car cela permet d'éviter le fameux "enfer des DLL" qui se produit sous Windows lorsque cette convention n'est pas respectée de manière cohérente... En nommant les fichiers de la bibliothèque de manière à inclure le numéro de la version majeure, les utilisateurs peuvent avoir plusieurs versions installées et les programmes utiliseront les bonnes versions au moment de l'exécution. La version de la DLL ne doit pas nécessairement être la même que celle de la version globale du projet. Sous Linux et OSX, les versions sont ajoutées au nom du fichier (par exemple, librecorder.so.0.0.1).

(Si j'utilise Visual C++, j'ajoute également toujours une balise indiquant la version de Visual C que j'ai utilisée, car le code généré par les différentes versions est largement incompatible).

Peut-être pouvez-vous simplement omettre la définition de VERSION pour désactiver ce comportement, mais je ne peux pas le vérifier pour l'instant sous Windows (sous Linux, où les bibliothèques partagées ont toujours des numéros de version, cela suppose simplement la version 1.0.0).

5voto

vitperov Points 48

Essayez ça :

CONFIG += skip_target_version_ext

2voto

iamantony Points 151

Utile astuce :

VERSION = 0.0.1
win32:TARGET_EXT = .dll

Avec cela, vous obtiendrez :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X