3

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

  • 示例app.pro
    • app1.pro
    • app2.pro
    • 共享库.pro

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

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

4

2 回答 2

5

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

  • 项目1
    • 应用程序1
      • app2.pro
    • 应用程序2
      • app2.pro
    • 共享库
      • 共享库.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

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

于 2010-05-20T04:44:00.543 回答
0

为了补充这一点(有点晚了!),可以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-08-12T09:17:12.090 回答