【问题标题】:What is the easiest way to reference libraries in Qt projects?在 Qt 项目中引用库的最简单方法是什么?
【发布时间】:2010-05-20 02:19:24
【问题描述】:

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

  • exampleapp.pro
    • app1.pro
    • app2.pro
    • sharedlib.pro

现在,我要做的是从 app1 和 app2 中引用 sharedlib,这样每次运行 app1.exe 时,我就不必手动将 sharedlib.dll 从自己的文件夹复制到 app1.exe 的文件夹中。

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

【问题讨论】:

    标签: qt shared-libraries project-files


    【解决方案1】:

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

    • 项目1
      • bin
      • 应用程序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
    

    这仅用于开发,在创建安装程序时,库和可执行文件放置在适当的目录中,具体取决于操作系统。

    【讨论】:

    • 这个解决方案很好用,谢谢。不过,我实际上只是把所有东西都放在了 bin 中。很抱歉延迟接受您的回答。
    【解决方案2】:

    补充一点(有点晚了!),可以在构建完成后使用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
    

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      相关资源
      最近更新 更多