我有一个带有这样一个项目文件的小Qt项目:
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添加到库和dll名称中?
生成的makefile似乎不是附加的,而是假设它,在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.release不是一个可访问的解决方案)
发布于 2009-01-01 14:42:23
它来源于版本的第一部分。"lib“模板正在添加它。
将它包含在库名中是个好主意,因为它避免了在Windows上发生的臭名昭著的"DLL地狱“,在Windows上,这个约定没有得到一致遵守……通过命名包含主版本号的库文件,用户可以安装多个版本,程序将在运行时使用正确的版本。DLL版本不一定需要与整个项目发布版本相同。在Linux和OSX上,版本被附加到文件名(例如librecder.so.0.0.1)
如果使用VisualVisualC++,我也总是添加一个标记,指示我使用的Visual版本,因为由不同版本生成的代码基本上也是不兼容的。
也许您可以省略版本的定义来禁用这种行为,但是我现在无法验证Windows (在Linux上,共享库总是有版本号,它只是假设版本1.0.0)。
发布于 2016-03-15 12:19:46
试试这个:
CONFIG += skip_target_version_ext发布于 2017-02-16 09:26:06
有用的把戏
VERSION = 0.0.1
win32:TARGET_EXT = .dll有了这个,你会得到:
https://stackoverflow.com/questions/404774
复制相似问题