Pregunta

Tengo este pequeño proyecto Qt con un archivo de proyecto como este:

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

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

Cuando compilo una biblioteca de ella mediante qmake & amp; & amp; nmake , resulta en archivos

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

¿Por qué se agrega ese 0 adicional a los nombres lib y dll?

Los makefiles generados parecen no estar agregándolos, sino que simplemente asumen que, en Makefile.Release simplemente dice:

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

¿Cómo puedo prevenirlo y nombrar mis bibliotecas como desee?

(Tenga en cuenta que corregir el archivo makefile.release no es una solución accesible)

¿Fue útil?

Solución

Viene de la primera parte de VERSION. El " lib " TEMPLATE lo está agregando.

OMI es una buena idea incluirlo en el nombre de la biblioteca, ya que evita el infame " DLL Hell " eso sucede en Windows donde no se sigue esta convención sistemáticamente ... Al nombrar los archivos de la biblioteca para incluir el número de versión principal, los usuarios pueden tener varias versiones instaladas y los programas usarán las versiones correctas en el tiempo de ejecución. La versión DLL no necesariamente tiene que ser la misma que la versión de lanzamiento general del proyecto. En Linux y OSX, las versiones se agregan al nombre de archivo (por ejemplo, librecorder.so.0.0.1)

[Si utilizo Visual C ++, también siempre agrego una etiqueta que indica qué versión de Visual C usé, ya que el código generado por las diferentes versiones también es incompatible en gran medida.]

Tal vez solo puede omitir la definición de VERSIÓN para deshabilitar este comportamiento, pero no puedo verificarlo ahora mismo para Windows (en Linux, donde las bibliotecas compartidas siempre tienen números de versión, solo asume la versión 1.0.0.)

Otros consejos

Prueba esto:

CONFIG += skip_target_version_ext

Útil truco :

VERSION = 0.0.1
win32:TARGET_EXT = .dll

Con esto obtendrás:

  • en Linux: librecord.so, ..., librecord.so.0.0.1
  • en Windows: record.dll
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top