在Qt项目中引用库最简单的方法是什么?
问题描述:
我有两个Qt4 Gui应用程序项目和一个共享库项目,所有引用在带有“subdirs”模板的.pro文件中。因此,它是这样的:在Qt项目中引用库最简单的方法是什么?
- exampleapp.pro
- app1.pro
- app2.pro
- sharedlib.pro
现在,我想做的事是从app1和app2引用sharedlib,以便每次运行app1.exe时,我都不必手动将sharedlib.dll从它自己的文件夹复制到应用程序1.exe的文件夹。
我可以在项目窗口中设置PATH环境变量,但这不是很便携。我已经看过把LIBS变量放在app1.pro文件中,但我不确定这是否仅仅涉及静态链接库 - 我用各种语法尝试过它,它似乎不适用于共享库。
答
你可以组织你的项目如下:
- PROJECT1
- 斌
- LIB
- APP1
- app2.pro
- APP2
- app2.pro
- sharedlib
- sharedlib.pro
在sharedlib.pro可以添加这样的事情:
TEMPLATE = lib
TARGET = sharedlibr
QT + = core \
gui
DESTDIR = ../lib
DESTDIR:保证编译的结果将被复制到的位置 “../lib目录”
为应用APP1和App2:
TEMPLATE = app
TARGET = app1
QT + = core \
gui
DESTDIR = ../bin
这仅用于开发时,创建安装程序,库和可执行文件被放置在适当的目录中,具体取决于操作系统。
答
要添加到此(有点晚!),可以使用QMAKE_POST_LINK
在构建完成后复制文件。示例:
defineReplace(formatpath) {
path = $$1
win32 {
return(\"$$replace(path, "/", "\\")\")
} else:unix {
return($$replace(path, " ", "\\ "))
} else {
error("Unknown platform in formatpath!")
}
}
win32:COPY_CMD = copy
unix:COPY_CMD = cp -P
macx:COPY_CMD = cp -R
win32:CMD_SEP = $$escape_expand(\n\t)
unix:CMD_SEP = ";"
win32:LIB_EXT = dll
unix:LIB_EXT = so*
macx:LIB_EXT = dylib
# Put here the directory of your library's build dir, relative to the current directory
# A path is given for example...
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin
QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP
此解决方案效果很好,谢谢。不过,我实际上只是把所有东西都放进垃圾箱。对不起,接受你的答案的延迟。 – 2010-05-22 07:22:19