我有这个小小的建项目的项目文件是这样的:

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

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

当我编一个图书馆从它通过 qmake && nmake, 它的结果成文件

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

为什么是额外的0增加到lib和dll的名字?

所产生的生成文件似乎未被追加它,而只是假设, Makefile.Release 它只是说:

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

我怎么可以阻止它,我的名字图书馆作为我的愿望是什么?

(注意,手动解决makefile。释放并不是一个带淋浴设施解决方案)

有帮助吗?

解决方案

它来自VERSION的第一部分。 “lib”是指“lib”。 TEMPLATE正在添加它。

IMO将它包含在库名中是个好主意,因为它避免了臭名昭着的“DLL Hell”。在Windows上不会始终遵循此约定的情况下...通过命名库文件以包含主版本号,用户可以安装多个版本,程序将在运行时使用正确的版本。 DLL版本不一定需要与整个项目发布版本相同。在Linux和OSX上,版本附加到文件名(例如librecorder.so.0.0.1)

[如果使用Visual C ++我也总是添加一个标签,指示我使用的Visual C版本,因为不同版本生成的代码也很不兼容。]

也许您可以省略VERSION的定义来禁用此行为,但我现在无法验证Windows(在Linux上,共享库总是有版本号,它只是假定版本1.0.0。)

其他提示

试试这个:

CONFIG += skip_target_version_ext

有用的 :

VERSION = 0.0.1
win32:TARGET_EXT = .dll

有了这个,你会得到:

  • 在Linux上librecord.因此,...,librecord.此。0.0.1
  • 在窗口:record.dll
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top