Qt。尝试 运行 项目时复制文件错误。如何纠正错误以及为什么会发生错误?

Qt. Copying file error while trying to run the project. How to fix a mistake and why is it happening?

我正在尝试安装和创建第一个 Qt 项目。我将 CLion 与 CMake 和 Qt 6 一起使用。 我设置了 CMake:

cmake_minimum_required(VERSION 3.17)
project(QSnake)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(QT_VERSION 6)
set(REQUIRED_LIBS Core Gui Widgets)
set(REQUIRED_LIBS_QUALIFIED Qt6::Core Qt6::Gui Qt6::Widgets)

set(CMAKE_PREFIX_PATH D:/Qt/6.0.2/mingw81_64/lib/cmake)

add_executable(${PROJECT_NAME} main.cpp)

if(NOT CMAKE_PREFIX_PATH)
    message(WARNING "CMAKE_PREFIX_PATH is not defined, you may need to set it "
                    "(-DCMAKE_PREFIX_PATH=\"path/to/Qt/lib/cmake\" or -DCMAKE_PREFIX_PATH=/usr/include/{host}/qt{version}/ on Ubuntu)")
endif()
find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED})
if(WIN32)
    set(DEBUG_SUFFIX)
    if (CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif()
    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
    if(NOT EXISTS "${QT_INSTALL_PATH}/bin")
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        if(NOT EXISTS "${QT_INSTALL_PATH}/bin")
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        endif()
    endif()
    if(EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E make_directory
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
    endif()
    foreach(QT_LIB ${REQUIRED_LIBS})
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt${QT_VERSION}${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>")
    endforeach(QT_LIB)
endif()

其实在创建CLion工程的时候就是这样生成的。我只设置了路径:D:/Qt/6.0.2/mingw81_64/lib/cmake

为了以防万一,我也会加上main.c代码。它也是由 CLion 生成的。

#include <QApplication>
#include <QPushButton>

int
main(int argc,
     char *argv[])
{
    QApplication a(argc, argv);
    QPushButton button("Hello world!", nullptr);
    button.resize(200, 100);
    button.show();
    return QApplication::exec();
}

我没有发现 CMake 有任何问题,但是当我尝试 运行 项目时出现错误:

Error copying file "D:/Qt/6.0.2/mingw81_64/lib/cmake/../../bin/Qt6Cored.dll" to "D:/QSnake/cmake-build-debug".
mingw32-make[3]: *** [CMakeFiles\QSnake.dir\build.make:126: QSnake.exe] Error 1
mingw32-make[3]: *** Deleting file 'QSnake.exe'
mingw32-make[2]: *** [CMakeFiles\Makefile2:96: CMakeFiles/QSnake.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:103: CMakeFiles/QSnake.dir/rule] Error 2
mingw32-make: *** [Makefile:137: QSnake] Error 2

这是什么错误,我该如何解决?我知道构建没有问题 - 只是复制错误。复制的 dll 应该称为“Cored”而不是“Core”吗?

感谢您的关注!如果您需要任何其他信息,请告诉我 - 我会尽力澄清问题。

问题已解决。 是否对任何人都有用,但是CLion自动生成的CMake包含在调试模式下导致错误的行(为所有dll文件添加'd'后缀):

if (CMAKE_BUILD_TYPE MATCHES "Debug")
    set(DEBUG_SUFFIX "d")
endif()

删除那些行救了我 :)

真正的答案是您使用的是定义为“调试”的 CMake 配置文件,而您还没有安装 Qt 的调试版本。

要解决而不是修补,如果您不想下载调试 DLL,请为“发布”创建一个 CMake 配置文件。

我遇到了同样的问题,这里 none 的答案解决了问题。 这是我自己解决的方法:

长话短说:

  1. 创建项目时设置prefix-path
  2. 将缺失的 Qt6Cored.dll 复制到 bin-folder

在 Clion 中创建新项目时,请务必设置正确的 prefix-path:

您可以在错误消息中看到 /bin/Qt6Cored.dll 会自动添加到前缀路径,因此您在设置 [=47= 时不必 select bin 文件夹].

此后我仍然收到错误消息(但路径显示正确,没有任何“/../..”)。

然后我意识到我的 bin-folder 中没有 Qt6Cored.dll:

所以我简单地将丢失的文件从C:\Qt.1.3\msvc2019_64\bin复制到C:\Qt.1.3\mingw81_64\bin

然后成功了!

如果您没有 msvc2019_64 文件夹,您可以通过 app-settings 修改 Qt 来安装它: