Por nome da biblioteca recebe um adicional 0 em seu nome?
Pergunta
Eu tenho esse projeto Qt minúsculo com um arquivo de projeto como este:
TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h
Quando eu compilar uma biblioteca a partir dele por qmake && nmake
, que resulta em arquivos
record32.obj
record320.lib
record320.dll
...
Por que é que adicional 0 adicionados à lib e dll nomes?
Os makefiles gerados parecem não ser acrescentá-lo, mas sim apenas supor que, em Makefile.Release
ele apenas diz:
####### 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
Como posso evitar que ela e nomear minhas bibliotecas como eu desejo?
(Note que corrigir manualmente o makefile.release não é uma solução accetable)
Solução
Ela vem da primeira parte da versão. O modelo "lib" está adicionando-lo.
IMO é uma boa idéia para incluí-lo no nome da biblioteca, uma vez que evita o infame "DLL Hell", que acontece no Windows onde esta convenção não é seguido de forma consistente ... Ao nomear os arquivos de biblioteca para incluir o número da versão principal , os usuários podem ter várias versões instaladas e programas usarão as versões corretas em tempo de execução. A versão DLL não neccesarily precisa ser o mesmo que a versão geral de lançamento do projeto. Em Linux e OSX as versões são anexada ao seu nome (por exemplo librecorder.so.0.0.1)
[Se estiver usando Visual C ++ Eu também sempre adicionar uma etiqueta indicando que versão do Visual C I utilizado desde código gerado pelas diferentes versões são em grande parte incompatível também.]
Talvez você pode simplesmente omitir a definição de VERSÃO desativar esse comportamento, mas não posso verificar se agora para Windows (no Linux, onde bibliotecas compartilhadas sempre têm números de versão, ele só assume a versão 1.0.0.)
Outras dicas
Tente isto:
CONFIG += skip_target_version_ext
truque :
VERSION = 0.0.1
win32:TARGET_EXT = .dll
Com isso, você vai ter:
- no Linux: librecord.so, ..., librecord.so.0.0.1
- no Windows: record.dll