【问题标题】:Cmake, Qt: dynamically change path to Bin and Plugins for x86/x64 versionsCmake,Qt:动态更改 x86/x64 版本的 Bin 和插件的路径
【发布时间】:2019-03-27 05:13:43
【问题描述】:

已经在 SO 中探索了几个类似的解决方案,但似乎没有一个可行。

我创建了两个包装脚本,为 x86 和 x64 版本的 Qt 更改 PATH env,仅用于调试特定应用程序架构的应用程序。

例如,选择 x86 配置,我需要添加 msvc2015\binmsvc2015\plugins\platforms 的路径才能调试 x86 Qt 应用程序。对于 x64,它将分别为 msvc2015_64\binmsvc2015_64\plugins\platforms

作为第一个版本,我创建了脚本 setup_path.cmd 并将其作为预构建步骤执行

setup_path.cmd

@echo off

set PATH=%PATH%;C:\Qt\5.11.2\msvc2015\bin;C:\Qt\5.11.2\msvc2015\plugins\platforms

...并将其称为 CMakeLists.txt 的预构建步骤

add_custom_command(TARGET ${TARGET} PRE_BUILD COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/setup_path.cmd)

路径${CMAKE_CURRENT_SOURCE_DIR} 不包含空格。

脚本执行正常,但调试器下的Qt应用还是看不到Qt库和插件。

我选择编辑PATH的方式是最明显的,Qt可能有更具体的方式,但我在文档中找不到。

【问题讨论】:

    标签: c++ qt cmake environment-variables


    【解决方案1】:

    这是因为构建环境与运行/调试环境不同。为构建环境修改PATH 不会影响您的应用程序运行/调试环境(至少不会影响CMake)。

    问题是您需要告诉 Windows 从何处获取 Qt 的 DLL。 DLL 查找由 windows 按此顺序分 4 个主要步骤完成(更多 here):

    1. 加载应用程序的目录
    2. 当前目录
    3. 系统目录
    4. PATH 环境变量中列出的目录

    在这种情况下,你真的不想修改 Windows 系统文件夹,所以我们只剩下其他三个选项。

    1. 将必要的 DLL 复制到应用程序目录中。当应用程序开发人员想要拥有不依赖于必须安装 Qt 的用户的“便携式”软件版本时,通常会采用这种方法。这可以通过windeployqtBundleUtilities 来实现。

    2. 在当前工作文件夹中有必要的 DLL。将 DLL 复制到您的工作目录。 Visual Studio 中的工作目录在Properties of your project -> Configuration Properties -> Debugging -> Working Directory 中定义,默认设置为$(ProjectDir)

    3. 在运行调试器时将 DLL 的路径添加到环境变量 PATH。 Visual Studio 有Properties -> Configuration Properties -> Debugging -> Environment 字段,允许您修改环境。不幸的是,CMake 没有为你做这件事的工具。 但是我们可以通过另一种方式来处理它——通过修改Properties -> Configuration Properties -> VC++ Directories -> Executable Directories。从 3.12 版本开始的 CMake 具有变量 CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES 来访问它。


    同时检查this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2016-10-05
      • 2015-09-06
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多