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)

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top