我有两个QT4 GUI申请项目,一个 共享 库项目,所有内容均在带有“ subdirs”模板的.pro文件下引用。所以,就像:

  • extpleapp.pro
    • app1.pro
    • app2.pro
    • ShareShareLib.pro

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

我可以在“项目”窗口中设置路径环境变量,但这不是很便携。我已经考虑将libs变量放在app1.pro文件中,但是我不确定这是否是指静态链接的库 - 我已经尝试了各种语法,并且似乎与共享libs不起作用。

有帮助吗?

解决方案

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

  • Project1
    • 垃圾箱
    • lib
    • App1
      • app2.pro
    • App2
      • app2.pro
    • ShareSlabib
      • ShareShareLib.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

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

其他提示

为了添加此(有点晚!),可以使用 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top