Ich habe dieses winzige Qt-Projekt mit einer Projektdatei wie dieser:
TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH +=.
INCLUDEPATH +=.
CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h
Wenn ich eine Bibliothek daraus kompiliere qmake && nmake
, führt dies zu Dateien
record32.obj
record320.lib
record320.dll
...
Warum wird diese zusätzliche 0 zu den lib- und dll-Namen hinzugefügt?
Die generierten Makefiles scheinen es nicht anzuhängen, sondern nehmen es einfach an, Makefile.Release
darin heißt es 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 das verhindern und meine Bibliotheken nach Belieben benennen?
(Beachten Sie, dass das manuelle Reparieren von makefile.release keine akzeptable Lösung ist.)
Lösung des Problems
Es stammt aus dem ersten Teil von VERSION. Das "lib" TEMPLATE fügt es hinzu.
IMO ist es eine gute Idee, es in den Bibliotheksnamen aufzunehmen, da es die berüchtigte "DLL-Hölle" vermeidet, die unter Windows passiert, wo diese Konvention nicht konsequent befolgt wird... Indem die Bibliotheksdateien so benannt werden, dass sie die Hauptversionsnummer enthalten, können Benutzer dies tun mehrere Versionen installiert haben und die Programme zur Laufzeit die richtigen Versionen verwenden. Die DLL-Version muss nicht unbedingt mit der gesamten Release-Version des Projekts übereinstimmen. Unter Linux und OSX werden die Versionen an den Dateinamen angehängt (zB librecorder.so.0.0.1)
[Wenn ich Visual C++ verwende, füge ich auch immer ein Tag hinzu, das angibt, welche Version von Visual CI verwendet wurde, da Code, der von den verschiedenen Versionen generiert wurde, ebenfalls weitgehend inkompatibel ist.]
Vielleicht können Sie die Definition von VERSION einfach weglassen, um dieses Verhalten zu deaktivieren, aber ich kann das im Moment nicht für Windows überprüfen (unter Linux, wo gemeinsam genutzte Bibliotheken immer Versionsnummern haben, wird nur Version 1.0.0 angenommen.)
Keine Kommentare:
Kommentar veröffentlichen