Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt项目中引用库的最简单方法是什么?_Qt_Shared Libraries_Project Files - Fatal编程技术网

在Qt项目中引用库的最简单方法是什么?

在Qt项目中引用库的最简单方法是什么?,qt,shared-libraries,project-files,Qt,Shared Libraries,Project Files,我有两个Qt4 Gui应用程序项目和一个共享库项目,它们都在一个带有“subdirs”模板的.pro文件下引用。所以,这就像: 例如app.pro app1.pro app2.pro sharedlib.pro 现在,我想做的是从app1和app2引用sharedlib,这样每次运行app1.exe时,我就不必手动将sharedlib.dll从它自己的文件夹复制到app1.exe的文件夹 我可以在“项目”窗口中设置PATH环境变量,但这不是很好移植。我已经考虑过将LIBS变量放在app1

我有两个Qt4 Gui应用程序项目和一个共享库项目,它们都在一个带有“subdirs”模板的.pro文件下引用。所以,这就像:

  • 例如app.pro
    • app1.pro
    • app2.pro
    • sharedlib.pro
现在,我想做的是从app1和app2引用sharedlib,这样每次运行app1.exe时,我就不必手动将sharedlib.dll从它自己的文件夹复制到app1.exe的文件夹


我可以在“项目”窗口中设置PATH环境变量,但这不是很好移植。我已经考虑过将LIBS变量放在app1.pro文件中,但我不确定它是否仅指静态链接库-我尝试过使用各种语法,但它似乎不适用于共享LIBS。

您可以按如下方式组织项目:

  • 项目1
    • 垃圾箱
    • 解放党
    • 附件1
      • app2.pro
    • 附件2
      • app2.pro
    • 共享数据库
      • 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\u POST\u链接复制文件。例如:

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

此解决方案非常有效,谢谢。实际上我只是把所有的东西都放进垃圾箱。很抱歉延迟接受您的答复。