我正在尝试使用qmake在Linux上构建动态库.这是我的.pro文件:
TEMPLATE = lib
TARGET = sqxUiBase
QT += core gui
CONFIG += dll
INCLUDEPATH += ../../public/include
DEPENDPATH += .
UI_DIR += ../GeneratedFiles
RCC_DIR += ../GeneratedFiles
CONFIG(release, debug|release) {
DESTDIR = ../lib/release
LIBS += -L"../lib/release"
MOC_DIR += ../GeneratedFiles/release
OBJECTS_DIR += release
} else {
DESTDIR = ../lib/debug
LIBS += -L"../lib/debug"
MOC_DIR += ../GeneratedFiles/debug
OBJECTS_DIR += debug
}
include(sqxUiBase.pri)
Run Code Online (Sandbox Code Playgroud)
sqxUiBase.pri文件包含需要构建的文件列表.
现在,问题是无论我做什么,结果文件总是被命名sqxUiBase.so.1.0.0,有一堆符号链接(sqxUiBase.so,sqxUiBase.so.1和sqxUiBase.so.1.0)指向它.我怎样才能使它只有一个sqxUiBase.so文件而没有链接?
我有一个像项目文件这样的小Qt项目:
TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h
Run Code Online (Sandbox Code Playgroud)
当我从中编译库时qmake && nmake,它会产生文件
record32.obj
record320.lib
record320.dll
...
Run Code Online (Sandbox Code Playgroud)
为什么在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
Run Code Online (Sandbox Code Playgroud)
如何防止它并按我的意愿命名我的库?
(注意手动修复makefile.release不是一个可以接受的解决方案)