RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1000337
Accepted
ghostinecatnewyear
ghostinecatnewyear
Asked:2020-07-08 03:49:42 +0000 UTC2020-07-08 03:49:42 +0000 UTC 2020-07-08 03:49:42 +0000 UTC

使用 CMake 构建 Qt 项目的奇怪问题

  • 772

该项目的原始结构是:

在此处输入图像描述

其中 CMakeLists.txt 的内容如下:

cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)

project(HardwareAndSystemInformation LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5 REQUIRED COMPONENTS 
    Core 
    Gui 
    Widgets 
    WebEngineWidgets
)

set(project_headers 
    aboutwindow.h 
    datacollector.h 
    filesystemworkmodule.h 
    mainwindow.h 
    outerfileincluder.h
)

set(project_sources 
    aboutwindow.cpp 
    datacollector.cpp 
    filesystemworkmodule.cpp 
    main.cpp 
    mainwindow.cpp 
    outerfileincluder.cpp
)

qt5_wrap_cpp(project_sources_moc                     
${project_headers})

source_group("MOC Files" FILES 
${project_sources_moc})

    add_executable(${PROJECT_NAME} WIN32 
        ${project_headers} 
        ${project_sources} 
        ${project_sources_moc}
    )

    target_link_libraries(${PROJECT_NAME} PUBLIC 
        Qt5::Core 
        Qt5::Gui 
        Qt5::Widgets 
        Qt5::WebEngineWidgets
    )

get_target_property(_qmake_executable Qt5::qmake         
IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir         
"${_qmake_executable}" DIRECTORY)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt     
HINTS "${_qt_bin_dir}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
    env PATH="${_qt_bin_dir}" 
"${WINDEPLOYQT_EXECUTABLE}"
            --verbose 0
            --no-compiler-runtime
            \"$<TARGET_FILE:${PROJECT_NAME}>\"
)

该程序集非常成功地完成,并且还生成了 .exe(在 Visual Studio 中启动)。

随着项目的进一步发展,其结构略有变化:

在此处输入图像描述

CMakeLists.txt 的内容是:

cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)

project(HardwareAndSystemInformation LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)

find_package(Qt5 REQUIRED COMPONENTS 
    Core 
    Gui 
    Widgets 
    WebEngineWidgets
)

set(project_headers 
    src/aboutwindow.h 
    src/datacollector.h 
    src/filesystemworkmodule.h 
    src/mainwindow.h 
    src/outerfileincluder.h 
    src/webengineview.h
    src/windowsoptions.h
)

set(project_sources 
    src/aboutwindow.cpp 
    src/datacollector.cpp 
    src/filesystemworkmodule.cpp 
    src/main.cpp 
    src/mainwindow.cpp 
    src/outerfileincluder.cpp 
    src/webengineview.cpp
    src/windowsoptions.cpp
)

set(project_resources resources.qrc)

qt5_wrap_cpp(project_sources_moc ${project_headers})
source_group("MOC Files" FILES ${project_sources_moc})

add_executable(${PROJECT_NAME} WIN32
    ${project_headers} 
    ${project_sources} 
    ${project_resources} 
    ${project_sources_moc}
)

target_link_libraries(${PROJECT_NAME} PUBLIC 
    Qt5::Core 
    Qt5::Gui 
    Qt5::Widgets 
    Qt5::WebEngineWidgets
)

get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
        env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}"
            --verbose 0
            --no-compiler-runtime
            \"$<TARGET_FILE:${PROJECT_NAME}>\"
)

问题是 CMake 正常地“看似”构建它(有时会弹出错误“生成过程中的错误,项目文件可能无效”,但并非总是如此)。接下来,Visual Studio 无法生成 .exe。这就是它的全部 - CMake 没有提供有关错误的任何详细信息。

乍一看,一切似乎都是正确的,因为我刚刚添加了一些带有标题的新源和一个带有图像的 .qrc。此外,qmake 构建项目时不会出错,甚至可以运行。

我知道对问题的解释是相当肤浅的,并不指望有保证的答案,但我怀疑我在某个地方搞砸了构建配置,我希望有经验的人至少能够偶然发现一个差距。

qt
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    ghostinecatnewyear
    2020-07-09T08:34:50Z2020-07-09T08:34:50Z

    决定了。我忘记用 Q_OBJECT 宏标记使用槽和信号的类之一,因为没有为它生成 MOC 文件,因此项目没有正确构建。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5