Question

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

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

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

Quand je compile une bibliothèque avec qmake & amp; & amp; nmake , il en résulte des fichiers

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

Pourquoi ces 0 supplémentaires sont-ils ajoutés aux noms des bibliothèques et des dll?

Les fichiers Make générés ne semblent pas l’ajouter mais plutôt l’assumer, dans Makefile.Release , il est simplement indiqué:

####### 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 à ma guise?

(Notez que la correction manuelle du makefile.release n'est pas une solution acceptable)

Était-ce utile?

La solution

Cela vient de la première partie de VERSION. Le " lib " TEMPLATE l'ajoute.

IMO, c'est une bonne idée de l'inclure dans le nom de la bibliothèque, car cela évite le fameux " DLL Hell " cela se produit sous Windows où cette convention n'est pas suivie de manière cohérente ... En nommant les fichiers de bibliothèque pour inclure le numéro de version principale, les utilisateurs peuvent avoir plusieurs versions installées et les programmes utiliseront les versions correctes au moment de l'exécution. La version de la DLL ne doit pas nécessairement être identique à la version de projet globale. Sous Linux et OSX, les versions sont ajoutées au nom de fichier (par exemple, librecorder.so.0.0.1)

[Si j'utilise Visual C ++, j'ajoute 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 également 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 maintenant pour Windows (Sous Linux, où les bibliothèques partagées ont toujours des numéros de version, cela suppose simplement la version 1.0.0.)

Autres conseils

Essayez ceci:

CONFIG += skip_target_version_ext

utile astuce :

VERSION = 0.0.1
win32:TARGET_EXT = .dll

Avec ceci, vous obtiendrez:

  • sous Linux: librecord.so, ..., librecord.so.0.0.1
  • sous Windows: record.dll
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top