Domanda

Ho questo piccolo progetto Qt con un file di progetto come questo:

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

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

Quando compilo una libreria da qmake & amp; & amp; nmake , risulta in file

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

Perché lo 0 aggiuntivo viene aggiunto ai nomi lib e dll?

I makefile generati sembrano non aggiungerlo, ma piuttosto assumerlo, in Makefile.Release dice solo:

####### 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

Come posso impedirlo e nominare le mie librerie come desidero?

(Nota che correggere manualmente makefile.release non è una soluzione accettabile)

È stato utile?

Soluzione

Viene dalla prima parte della VERSIONE. La "quot" lib " TEMPLATE lo sta aggiungendo.

IMO è una buona idea includerlo nel nome della libreria, poiché evita il famigerato "inferno DLL" ciò accade su Windows in cui questa convenzione non viene seguita in modo coerente ... Denominando i file della libreria per includere il numero di versione principale, gli utenti possono avere più versioni installate e i programmi useranno le versioni corrette in fase di esecuzione. La versione DLL non deve necessariamente essere la stessa della versione generale della versione del progetto. Su Linux e OSX le versioni sono aggiunte al nome del file (ad es. Librecorder.so.0.0.1)

[Se uso Visual C ++ aggiungo sempre anche un tag che indica quale versione di Visual C ho usato poiché anche il codice generato dalle diverse versioni è in gran parte incompatibile.]

Forse puoi semplicemente omettere la definizione di VERSION per disabilitare questo comportamento, ma non posso verificarlo adesso per Windows (Su Linux, dove le librerie condivise hanno sempre numeri di versione, presuppone solo la versione 1.0.0.)

Altri suggerimenti

Prova questo:

CONFIG += skip_target_version_ext

Utile trick :

VERSION = 0.0.1
win32:TARGET_EXT = .dll

Con questo otterrai:

  • su Linux: librecord.so, ..., librecord.so.0.0.1
  • su Windows: record.dll
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top