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 的答案解决了问题。
这是我自己解决的方法:
长话短说:
- 创建项目时设置prefix-path
- 将缺失的 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 来安装它:
我正在尝试安装和创建第一个 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 的答案解决了问题。 这是我自己解决的方法:
长话短说:
- 创建项目时设置prefix-path
- 将缺失的 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 来安装它: