c++ - 使用 qmake 将 dll 安装到 2 个目标(路径)中

标签 c++ qt dll installation qmake

有如下qt pro文件:

CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(WidgetBoxPlugin)
TEMPLATE    = lib
...
target.path = $$[QT_INSTALL_PLUGINS]/designer
creator_target.path = $$[QTCREATOR_BIN_PATH]/plugins/designer
INSTALLS    += target creator_target

结果 dll 文件被复制到 2 个路径(目标)中。现在由于某些原因它不起作用:qmake 不会为第二个目标生成安装(复制)脚本(设置了 QTCREATOR_BIN_PATH)。如何正确编写第二次安装以便将 dll 安装到 2 个目的地?

完整项目:https://github.com/akontsevich/WidgetBox

最佳答案

How to write a copy of my project target correctly so dll being installed into 2 destinations?

您可以尝试使用 QMAKE_EXTRA_COMPILERS 创建一个新的目标路径:

http://blog.qt.io/blog/2008/04/16/the-power-of-qmake/

creator_target.name = Copying the target dll to Qt Creator plugins directory as well
creator_target.input = $$qtLibraryTarget(WidgetBoxPlugin)
creator_target.path  = $$[QTCREATOR_BIN_PATH]/plugins/designer
creator_target.CONFIG += target_predeps no_link
creator_target.output = WidgetBoxPlugin.dll
QMAKE_EXTRA_COMPILERS += creator_target

INSTALLS += creator_target

另一种可能更简单的方法是始终尝试复制后期构建,但使用 xcopy/D/Y 命令语法,如果目标存在,我们可以避免复制:

QMAKE_POST_LINK += xcopy /d/y $$qtLibraryTarget(WidgetBoxPlugin) ${QTCREATOR_BIN_PATH}/plugins/designer

此命令的问题是正确转义输入,但在 SO 上更广为人知:https://stackoverflow.com/search?q=QMAKE_POST_LINK

关于c++ - 使用 qmake 将 dll 安装到 2 个目标(路径)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551834/

相关文章:

c++ - C++ 中缺少标准化命名约定 "standard"

c++ - 强制 std::tuple 包含 std::pair<fixed_type, T>

qt - 为什么 QGraphicsView mapFromScene 返回差异点取决于何时调用 view.show()?

qt - 子进程标准输入不获取数据,由父进程发送

c++ - 从 Qt (c++) 调用 DLL 中的函数

c++ - 无法编译 Crow 示例 - boost/optional.hpp : No such file or directory

qt - 如何设置 QML 小部件的最小尺寸?

c# - 如何通过更改文本创建一个像这样的dll?

java - jna 句柄和字符串中函数映射 delphi/pascal dll

c++ - 谁能用几个术语解释一下 DYNAMIC_CLASS?