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)

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top