当前位置:  开发笔记 > 运维 > 正文

为什么库名在其名称中获得额外的0?

如何解决《为什么库名在其名称中获得额外的0?》经验,为你挑选了1个好方法。

我有一个像项目文件这样的小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不是一个可以接受的解决方案)



1> Reed Hedges..:

它来自VERSION的第一部分."lib"模板正在添加它.

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

[如果使用Visual C++,我也总是添加一个标记,指示使用的Visual CI版本,因为不同版本生成的代码也基本上不兼容.

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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有