使用 QtCreator 在 运行 上指定外部库路径

Specify external library PATH on Run with QtCreator

我在 Windows 上的 Qt 项目中包含了一个外部库。 构建过程完美运行,但是当我尝试 运行 代码时,它失败了。

我知道失败的原因是链接库 DLL 路径未包含在 PATH 环境中 variable/they 不在可执行路径中。

一种解决方案是将 DLL 路径添加到 PATH 环境变量中或将 DLL 复制到执行路径中,但我想避免这些并找到一个自动化解决方案。

我知道可以将 INSTALL 命令添加到 .pro 文件中,因此,如果我将命令 make install 添加到构建序列中,指定的依赖项将被复制到执行路径中。有人可以给我举个例子吗?我用于包含库的代码如下:

message(Importing SAT-Sdk)
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdk
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdkd
else:unix: LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdk

INCLUDEPATH += $$PWD/../../../SDK/dist/SAT-Sdk/include
DEPENDPATH += $$PWD/../../../SDK/dist/SAT-Sdk/include

另一种解决方案是指定 DLL 的路径,将命令添加到预配置的 运行 设置中,但我不知道确切的语法。谁能给我举个例子吗?

感谢您的帮助

您可以在项目的构建环境或 运行 环境中设置 PATH 环境变量。例如,参见 this project.

您可以按照 https://doc.qt.io/qt-5/qmake-advanced-usage.html#installing-files 中的说明将文件添加到 install 目标。您可以简单地添加如下内容:

target.files += $$PWD/../../../SDK/dist/SAT-Sdk/lib/sat_sdk.dll

尽管 lib 文件名可能取决于目标平台并且 debug/release 建立在 Windows 之上(带有 w/out "d" 后缀)。就我个人而言,我将所有这些设置在某处的某个中心位置,因此我不需要复制所有这些路径等。下面的示例(未经测试,YMMV,有很多方法可以做到这一点......等等:)

SAT_SDK_PATH = $$PWD/../../../SDK/dist/SAT-Sdk
SAT_SDK_LIB_PATH = $$SAT_SDK_PATH/lib
SAT_SDK_LIB = sat_sdk
win32:CONFIG(debug, debug|release):SAT_SDK_LIB = $${SAT_SDK_LIB}d

win32:SAT_SDK_LIB_BIN = $${SAT_SDK_LIB}.dll
else:SAT_SDK_LIB_BIN = lib$${SAT_SDK_LIB}.$${QMAKE_EXTENSION_SHLIB}

LIBS += -L$$SAT_SDK_LIB_PATH -l$$SAT_SDK_LIB
INCLUDEPATH += $SAT_SDK_PATH/include
DEPENDPATH += $SAT_SDK_PATH/include

target.files += $$SAT_SDK_LIB_PATH/$$SAT_SDK_LIB_BIN
target.path = #install path ...

!isEmpty(target.path): INSTALLS += target