Warum Bibliotheksname wird eine zusätzliche 0 in seinem Namen?
Frage
Ich habe dieses kleine Qt-Projekt mit einer Projektdatei wie folgt aus:
TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h
Wenn ich eine Bibliothek von ihm durch qmake && nmake
kompilieren, es führt in Dateien
record32.obj
record320.lib
record320.dll
...
Warum ist, dass zusätzliche 0 hinzugefügt, um die lib und DLL-Namen?
Die generierten Makefiles scheinen es nicht sein anhängt, sondern es nur annehmen, in Makefile.Release
es sagt nur:
####### 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
Wie kann ich es verhindern und meine Bibliotheken nennen, wie ich will?
(Beachten Sie, dass manuell beheben die makefile.release ist kein accetable Lösung)
Lösung
Es kommt aus dem ersten Teil VERSION. Der "lib" TEMPLATE fügt es.
IMO ist es eine gute Idee, es in der Bibliothek Namen, da es die berüchtigten „DLL Hell“ vermeidet, die auf Windows geschieht, wenn diese Konvention nicht konsequent verfolgt wird ... Durch die Bibliotheksdateien Benennung der Hauptversionsnummer enthält Benutzer können, haben mehrere Versionen installiert und Programme werden die richtigen Versionen zur Laufzeit verwenden. Die DLL-Version nicht neccesarily brauchen die gleiche wie die Gesamtprojekt Release-Version zu sein. Unter Linux und OSX sind die Versionen an den Dateinamen angehängt (z librecorder.so.0.0.1)
[Wenn Visual C ++ ich immer auch ein Tag hinzufügen angibt, welche Version von Visual C I verwendet, da die von den verschiedenen Versionen generierten Code sind auch weitgehend unvereinbar.]
Vielleicht können Sie nur die Definition von VERSION auslassen, dieses Verhalten zu deaktivieren, aber ich kann nicht bestätigen, dass jetzt für Windows (unter Linux, wo gemeinsam genutzte Bibliotheken immer Versionsnummern haben, nimmt nur die Version 1.0.0.)
Andere Tipps
Versuchen Sie folgendes:
CONFIG += skip_target_version_ext
Trick :
VERSION = 0.0.1
win32:TARGET_EXT = .dll
Damit erhalten Sie:
- auf Linux: librecord.so, ..., librecord.so.0.0.1
- unter Windows: record.dll