Win10下CMake编译Qt5 HelloWorld的链接错误与无输出问题修复咨询
解决Win10下CMake编译Qt5 HelloWorld的两类问题
一、修复x86/x64架构冲突与QCoreApplication链接错误
问题原因
- CMakeLists.txt中Qt路径使用单反斜杠,被CMake解析为转义字符,导致无法正确定位Qt库
- CMake生成的工程架构(x86)与Qt安装版本(msvc2019_64,x64)不匹配
- CMakeLists.txt指令顺序错误,查找Qt包前未设置路径,导致链接时找不到Qt符号
解决步骤
- 修正Qt路径的转义问题:将路径中的单反斜杠改为双反斜杠或正斜杠,避免转义错误
# 正确写法二选一 set(CMAKE_PREFIX_PATH "C:\\Qt\\5.15.14\\msvc2019_64") # 或 set(CMAKE_PREFIX_PATH "C:/Qt/5.15.14/msvc2019_64") - 调整CMakeLists.txt指令顺序:先设置Qt路径、查找Qt包,再创建可执行文件并链接库,完整示例:
set(CMAKE_PREFIX_PATH "C:/Qt/5.15.14/msvc2019_64") find_package(Qt5 REQUIRED COMPONENTS Core) add_executable(main main.cpp) target_link_libraries(main PRIVATE Qt5::Core) - 确保CMake生成x64架构工程:
- 命令行编译时,指定x64生成器:
cmake .. -G "Visual Studio 16 2019" -A x64 - 使用CMake GUI时,Configure步骤选择"Visual Studio 16 2019"并勾选x64架构
- 命令行编译时,指定x64生成器:
二、修复main.exe无"hello world"输出问题
问题原因
std::cout的输出默认会缓冲,而QCoreApplication启动事件循环后,缓冲未被及时刷新,导致输出无法显示
解决步骤
在输出语句后添加刷新操作,强制输出缓冲内容,修改后的main.cpp:
#include <iostream> #include <QCoreApplication> int main(int argc, char **argv) { QCoreApplication a(argc, argv); std::cout << "hello world" << std::endl; // 用endl刷新缓冲 return a.exec(); }
或者手动调用flush:
std::cout << "hello world"; std::cout.flush();
内容的提问来源于stack exchange,提问作者milanHrabos
相关产品推荐
相关产品推荐

