自学内容网 自学内容网

Cmake 编译QT4工程 Linux下 Cmake 编译Qt5

open  Object 按钮不好使 可能是没有选择默认打开方式

寻找qt库路径 需要再跟节点的CMAKELIST 下编写

find_package(Qt4 REQUIRED QtCore QtGui QtXml)

错误总结

报错 无法打开 ui_xxx.h

寻找ui_xxx.h 文件 也需要再根节点下编写  如果在具体项目文件夹下编写 也会找到不到

# 自动运行moc
 set(CMAKE_AUTOMOC ON)
# 自动运行uic
 set(CMAKE_AUTOUIC ON)
# 自动运行rcc
 set(CMAKE_AUTORCC ON)

也有可能#include ui_xxxx.h 在第一位 没有进行防止头文件重复包含

有时会报moc 重定义 

编译报错 QMetaObjectExtraData const YYDSApplication::staticMetaObjectExtraData" (?staticMetaObjectExtraData@YYDSApplication@@0UQMetaObjectExtraData@@B) 已经在 mocs_compilation.obj 中定义

有时候编译build两个文件 原因是因为头文件和.cpp两个名字不相同导致的

这个错误通常是由于多个源文件包含相同的 moc 文件所致。在使用 CMake 进行 Qt 项目构建时,需要确保 moc 文件只被生成和编译一次。AUTOMOC 会自动生成并处理 moc 文件,但有时候手动配置可能会产生重复的定义

确保 当前工程目录下只有一个moc

且不能对moc 处理两次  set(CMAKE_AUTOMOC ON) 已经生成了moc_xxx.h

这个错误通常发生在使用 AUTOMOC 和手动调用 qt4_wrap_cpp 处理同一个文件时。在这种情况下,需要确保 moc 文件只生成一次并且不重复包含

安装需要权限报错

Maybe need administrative privileges

从这条错误信息可以看出,CMake 试图在 C:/Program Files (x86)/TempDCF/bin 目录下创建文件夹时遇到了权限问题。系统提示 Maybe need administrative privileges,这表明操作需要管理员权限

********************************************分界线********************************************************

Qt5 寻找库目录为

find_package(Qt5 COMPONENTS Core Gui Qml Quick Widgets REQUIRED)

报错问题汇总

找不到GL这个错误是由于缺少 OpenGL 开发头文件。在 Linux 系统上,Qt5 需要 OpenGL 库来进行图形渲染。具体来说,它找不到 GL/gl.h 头文件,这是 OpenGL 的一部分

 Failed to find "GL/gl.h" in "/usr/include/libdrm"

可以使用以下命令来安装所需的包

sudo apt-get update
sudo apt-get install libgl1-mesa-dev

错误二:

CMake Error at DCFRAME/CMakeLists.txt:12 (add_executable):
  Target "DCFRAME" links to target "Qt5::QtXml" but the target was not found.
  Perhaps a find_package() call is missing for an IMPORTED target, or an
  ALIAS target is missing?
 这个错误提示说明你的 CMakeLists.txt 文件中尝试链接到 Qt5::QtXmlQt5::QtNetwork 目标,但是 CMake 没有找到这些目标。这通常是因为你没有在 CMakeLists.txt 文件中正确地调用 find_package 来查找这些 Qt 模块

find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Xml Network)

查看链接库是否写错

2. AUTOUIC找不到ui文件

fatal error: ui_XXX.h: 没有那个文件或目录 28 | #include "ui_XXX.h"

这个错误通常是因为 qt5_wrap_ui 没有正确生成 ui_XXX.h 文件,或生成的文件路径不正确。为了确保所有相关文件正确生成和包含,请确保在 CMakeLists.txt 文件中设置了正确的生成和包含路径。
由于采用set(CMAKE_AUTOUIC ON)的方式处理ui文件,编译时会报错找不到ui文件。

需要将ui文件夹加入AUTOUIC的搜索目录,这样AUTOUIC处理时才能找到ui文件。
解决方法:

list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS "ui")



注意:是CMAKE_AUTOUIC_SEARCH_PATHS,而不是AUTOUIC_SEARCH_PATHS。这个把我坑惨了。

接下来可能会继续报错找不到生成的对应的ui_XXX.h头文件,可以尝试以下选项之一:

因为自动生成的ui_XXX.h头文件是在构建目录下的,添加它即可。

# 其实只要这一条就够了,后面两条似乎也可以。

set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(${CMAKE_BINARY_PATH})
include_directories(${CMAKE_CURRENT_BINRAY_PATH})

3. AUTOMOC找不到定义(undefined to 'vtable for XXX')
这个是最让我头疼的,cmake官网也没有说怎么解决。(这部分还专门翻译了一下,见我的另一篇博客:cmake-qt AUTOMOC)

看到网上的解释,意思是如果你不在add_executable()中添加使用了Qt元系统的头文件,那么AUTOMOC就不会处理这些头文件。

所以我们把Qt的头文件加入到add_executable()即可,这也是我为什么将普通头文件和Qt头文件分离开的原因之一(因为普通头文件不需要,虽然加上也没错)。

add_executable(${EXE} ${SRC} ${INC})

构建过程:

cd /path/to/your/project/build
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build .
cmake --install .

cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
cmake --install .


原文地址:https://blog.csdn.net/YUyang0304/article/details/140237678

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!