我有一个像项目文件这样的小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
...
为什么在lib和dll名称中添加了额外的0?
生成的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不是一个可以接受的解决方案)
答案 0 :(得分:6)
它来自VERSION的第一部分。 “lib”模板正在添加它。
IMO最好将它包含在库名中,因为它避免了在Windows上发生的臭名昭着的“DLL Hell”,其中不遵循此约定...通过命名库文件以包含主要版本号用户可以安装多个版本,程序将在运行时使用正确的版本。 DLL版本不一定需要与整个项目发布版本相同。在Linux和OSX上,版本附加到文件名(例如librecorder.so.0.0.1)
[如果使用Visual C ++我也总是添加一个标签,指示我使用的Visual C版本,因为不同版本生成的代码也很不兼容。]
也许您可以省略VERSION的定义来禁用此行为,但我现在无法验证Windows(在Linux上,共享库总是有版本号,它只是假定版本1.0.0。)< / p>
答案 1 :(得分:3)
试试这个:
CONFIG += skip_target_version_ext
答案 2 :(得分:1)
有用的trick:
VERSION = 0.0.1
win32:TARGET_EXT = .dll
有了这个,你将得到: